Причины, почему PHP stream_socket_enable_crypto () возвращает FALSE? - PullRequest
0 голосов
/ 22 ноября 2018

Я настраиваю почтовый транспорт ZF3 SMTP для отправки сообщений на мой собственный почтовый сервер, который я настроил с использованием PostFix и Dovecot.

Я получаю ошибку 'Unable to connect via TLS', которая возникает, когда stream_socket_enable_crypto() пытается включить TLS.

Я пытался использовать другой сервер электронной почты (сервер электронной почты моего провайдера), используя TLS, и это сработало, поэтому это не сам мой код.

Так как я смог подключить Outlook к моему почтовому серверу, я знаю, что подключение к серверу smtp: 587 к моему серверу работает и аутентификация также работает.

Это не проблема аутентификации, посколькуЯ получаю путь включения TLS на сокете.

У кого-нибудь есть какие-либо предложения о том, где находится проблема?Или список вещей, которые нужно проверить, чтобы изолировать проблему?

РЕДАКТИРОВАТЬ:

Если эта дополнительная информация может помочь, я использую самоподписанный сертификат CA на моей машине разработки.Если быть точным, я запускаю PHP из Apache, который использует сертификат, сгенерированный из самозаверяющего CA.

Глядя на журналы из postfix / submission, я, похоже, получаю ошибку 'unkown CA',Попытка добавить мой самозаверяющий CA в список CA на моем сервере, но, похоже, это не решает проблему.

1 Ответ

0 голосов
/ 27 ноября 2018

После нескольких исследований выясняется, что PHP на моей локальной машине не был настроен должным образом для проверки доверенных ЦС.Я использую стек Bitnami, и PHP был настроен на использование локального пакета CA в каталоге установки PHP.Это устанавливается директивой openssl.capath= в php.ini.

     openssl.capath=c:/bitnami/wampstack-5.6.34-0/php/curl-ca-bundle.crt

Файл php.ini содержит следующий комментарий относительно openssl.capath:

     ; If openssl.cafile is not specified or if the CA file is not found, the
     ; directory pointed to by openssl.capath is searched for a suitable
     ; certificate. This value must be a correctly hashed certificate directory.
     ; Most users should not specify a value for this directive as PHP will
     ; attempt to use the OS-managed cert stores in its absence. If specified,
     ; this value may still be overridden on a per-stream basis via the "capath"
     ; SSL stream context option.

ЗакомментировавДиректива openssl.capath, PHP смог использовать хранилище сертификатов Windows и найти CA, связанный с сертификатом, используемым почтовым сервером.

...