Я только что обновил свой Debian 7, Nginx 1.6.2, PHP 5.4.39 до Debian 8, Nginx 1.6.2, PHP 5.6.9.
На этом сервере работает CRM, где мы использовали для отправки электронных писем через PHP, EspoCRM и это с помощью ZendFramwork2 E-Mail (отправка через сервер 2 - отправка через Thunderbird работает нормально).
Это работало нормально до обновления. Теперь у меня есть ошибка:
500 unable to connect via tls
Таким образом, небольшой поиск ничего не привел к CRM, а скорее указывает на самоподписанный сертификат и / или что-то в стеке выше (NGinx / PHP?).
Есть идеи, с чего начать копать? На моем CRM-сервере у меня нет ничего в журналах ошибок (думаю, это проглатывается CRM).
Я также ничего не вижу в системном журнале или в журнале авторизации сервера maiml.
РЕДАКТИРОВАТЬ: добавить информацию:
phpinfo ()
Registered Stream Socket Transports tcp, udp, unix, udg, ssl, sslv3, tls, tlsv1.0, tlsv1.1, tlsv1.2
curl
SSL Yes
SSL Version OpenSSL/1.0.1k
imap
SSL Support enabled
openssl
OpenSSL support enabled OpenSSL
Library Version OpenSSL 1.0.1k 8 Jan 2015 OpenSSL Header Version
OpenSSL 1.0.1k 8 Jan 2015 Directive Local Value Master Value
openssl.cafile no value no value openssl.capath no value no value
Phar
OpenSSL support enabled
Я использовал старый конфигурационный файл из Debian 7 (NGinx - та же версия - я использовал backport на D7).
Серверы и программное обеспечение:
Сервер А: Почтовый сервер, Debian 6, Postfix, самоподписанные сертификаты
Сервер B: Debian 8, Nginx, PHP, EspoCRM - Я выбрал TLS, так как он работал в моем Thunderbird на моем локальном ПК и работал до обновления Debian с 7 до 8.
Локальный ПК: Kubuntu, Thunderbird, письма можно отправлять и получать через TLS.
500 не может подключиться через tls
Это не очень помогает в определении того, где проблема, но это должно быть где-то в коде, который, по-видимому, вы не поддерживаете, поэтому изменение кода, чтобы заставить его работать, должно быть последним средством.
Было бы полезно знать, какое действие вызывает эту ошибку.
Поскольку единственное место в вашем манифесте, где упоминается самозаверяющий сертификат, - это почтовый сервер, я предполагаю, что это то, что вызывает здесь проблему.
Все, что вам нужно сделать, это добавить самозаверяющий сертификат в принятые органы на хосте, на котором находится приложение. Предполагая (опять же), что MTA использует SMTPS:
openssl s_client -showcerts -connect servera.example.com:465 </dev/null
Вы получите цепочку сертификатов. Скопируйте вывод в (скажем) /etc/ssl/certs/lbutlr_local.crt
затем беги update-ca-certificates
Насколько я понимаю, PHP 5.6 не позволяет принимать или обрабатывать самоподписанные сертификаты.
http://php.net/manual/en/migration56.openssl.php
Вы должны отключить проверку одноранговых и одноранговых имен
$streamContext = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
Это нетривиально, если вы пытаетесь сделать это в пакете (что, похоже, было задумано), вы не можете просто установить некоторые флаги в php.ini или что-то подобное.