我正在设置ZF3 SMTP邮件传输,以将邮件发送到使用PostFix和Dovecot设置的我自己的电子邮件服务器。
我不断收到'Unable to connect via TLS'
尝试启用TLS时发生的stream_socket_enable_crypto()
错误。
我尝试使用TLS与另一个电子邮件服务器(我的ISP的电子邮件服务器)配合使用,因此它可以工作,因此它不是我的代码本身。
由于我已经能够将Outlook连接到我的电子邮件服务器,所以我知道到smtp:587到我的服务器的连接都可以使用,并且身份验证也可以使用。
这不是身份验证问题,因为我确实在套接字上启用了启用TLS的路径。
有人对问题所在有任何建议吗?还是要检查以找出问题的清单?
编辑:
如果此附加信息有帮助,我在开发计算机上使用了自签名CA证书。确切地说,我从Apache运行PHP,该PHP使用从自签名CA生成的证书。
从后缀/提交中查看日志,我似乎收到了“未知的CA”错误。试图将我的自签名CA添加到服务器上的CA列表中,但这似乎无法解决问题。
答案 0 :(得分:2)
经过几次调查,结果发现我的本地计算机上的PHP未正确设置以验证受信任的CA。我正在运行Bitnami的堆栈,并且已将PHP设置为在PHP安装目录中使用本地CA捆绑软件。这是由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能够使用Window的证书存储区并找到与邮件服务器使用的证书关联的CA。