我刚刚将我的Debian 7,Nginx 1.6.2,PHP 5.4.39升级到Debian 8,Nginx 1.6.2,PHP5.6.9。
有一个客户关系管理系统运行在该服务器上,我们过去通过PHP、EspoCRM发送电子邮件,而它使用的是ZendFramwork2电子邮件(通过服务器2发送,通过雷鸟发送,运行得很好)。
直到升级之后才能正常工作。现在我有个错误说:
500 unable to connect via tls因此,稍微搜索一下CRM并没有显示任何内容,而是指向上面堆栈(NGinx/PHP?)上的自签名证书和/或其他东西。
知道从哪里开始挖吗?在我的CRM服务器中,我没有任何错误日志(猜这是CRM吞没的)。
我也没有在syslog或maiml服务器的authlog中看到任何东西。
编辑:添加信息:
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上使用了一个后端)。
服务器和软件:
服务器A:邮件服务器,Debian 6,后缀,自签名证书
服务器B: Debian 8,Nginx,PHP,EspoCRM -我选择了TLS,因为它在我的本地PC上运行,在Debian 7到8升级之前就已经开始工作了。
本地电脑: Kubuntu,Thunderbird,邮件可以通过TLS发送和接收。
发布于 2016-11-18 18:15:12
据我所知,PHP5.6不允许接受、验证或处理自签名证书.
http://php.net/manual/en/migration56.openssl.php
您必须禁用对等名和对等名的验证。
$streamContext = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);如果试图在一个包中(这似乎是由设计完成的)来完成这一任务,就不能仅仅在php.ini中设置一些标志,或者其他类似的简单方法。
发布于 2016-11-18 19:48:22
500无法通过tls连接
这在识别问题所在方面没有多大帮助--但它肯定在代码中的某个地方,您可能没有维护它,因此修改代码以使其工作应该是最后的手段。
知道是什么操作触发了这个错误是很有用的。
由于您的清单中提到自签名证书的唯一位置是邮件服务器,所以我将假设这就是造成此处问题的原因。
您所需要做的就是将自签名证书添加到应用程序所在主机上的已接受权限。假设(再次) MTA使用SMTPS:
openssl s_client -showcerts -connect servera.example.com:465 </dev/null会给你证书链。将输出复制到(例如) /etc/ssl/certs/lbutlr_local.crt中,然后运行update-ca-certificates
https://serverfault.com/questions/699627
复制相似问题