Назад | Перейти на главную страницу

Самоподписанные сертификаты создают проблемы на 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).
Я также ничего не вижу в системном журнале или в журнале авторизации сервера 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 или что-то подобное.