Самоподписанные сертификаты создают проблемы в NGinx/PHP

Самоподписанные сертификаты создают проблемы в NGinx/PHP

Я только что обновил свой 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).
Я также ничего не вижу в syslog или authlog сервера maiml.

EDIT: Добавить информацию:
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 той же версии — я использовал бэкпорт на D7).

Серверы и программное обеспечение:
Сервер А: Почтовый сервер, Debian 6, Postfix, самоподписанные сертификаты
Сервер Б: Debian 8, Nginx, PHP, EspoCRM — я выбрал TLS, так как он работает в Thunderbird на моем локальном ПК и работал до обновления с Debian 7 до 8.
Локальный ПК: Kubuntu, Thunderbird, почту можно отправлять и получать через TLS.

решение1

Насколько я понимаю, 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 или сделать что-то подобное.

решение2

500 невозможно подключиться через tls

Это не очень помогает определить, где именно находится проблема, но она должна быть где-то в коде, который вы, вероятно, не поддерживаете, поэтому внесение изменений в код, чтобы он заработал, должно быть последним средством.

Было бы полезно узнать, какое действие вызывает эту ошибку.

Поскольку единственное место в вашем манифесте, где упоминается самоподписанный сертификат, — это почтовый сервер, то я предполагаю, что именно он является причиной проблемы.

Все, что вам нужно сделать, это добавить самоподписанный сертификат в принятые полномочия на хосте, где находится приложение. Предполагая (опять же), что MTA использует SMTPS:

openssl s_client -showcerts -connect servera.example.com:465 </dev/null

Даст вам цепочку сертификатов. Скопируйте вывод в (say), /etc/ssl/certs/lbutlr_local.crtзатем запуститеupdate-ca-certificates

Связанный контент