两天前,我将openssl 1.0.1f更新为1.0.1g。一切看起来都很好。但是过了一段时间,sendmail日志中出现了一个错误:
邮件发送:17568:STARTTLS=client,错误:连接失败=-1,reason=tlsv1警报解码错误,SSL_error=1,errno=0,retry=-1 4月1日10:13:45邮件发送邮件17568:STARTTLS=client: 17568: error :1407741A:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1警报解码error:s23_clnt.c:762: Apr 10:13:45 mail sendmail17568:ruleset=tls_server,arg1=SOFTWARE,relay=mail.example.com,reject=403 4.7.0 TLS握手失败。
邮件还没送来。
然后,我将邮件降级到1.0.1f,并发送了以下邮件:
10:17:31 31809:STARTTLS=client,relay=mail.example.com.,version=TLSv1 1/SSLv3 3,verify=FAIL,密码=DHE-RSA256-SHA,bits=256/256
两个openssl版本之间似乎还有另外一个不同之处,而不仅仅是心血来潮的错误修复。
然后,我尝试了这两个OpenSSL版本:
openssl s_client -starttls smtp -connect mail.example.com:25
连接(00000003)140370040759952:错误:1407741A:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1警报解码error:s23_clnt.c:762:
没有同侪证书
没有发送客户端证书CA名称
SSL握手已读取131字节,写入了552字节。
新的,(无),密码是(无)安全的重新协商不支持压缩:无扩展:无
连接(00000003) depth=0 C= US,ST =加利福尼亚,L= San Bruno,O= "IronPort Systems,Inc.",CN = IronPort Appliance证书验证error:num=20:unable以获得本地颁发者证书验证返回:1 depth=0 C= US,ST =加利福尼亚,L= San Bruno,O= "IronPort Systems,Inc.",CN = IronPort Appliance error:num=21:unable,以验证第一份证书验证返回:1
证书链0 S:/C=US/ST=加利福尼亚/L=San Bruno/O=IronPort系统公司/CN=铁港电器演示证书I:/C=US/ST=加利福尼亚/San=San Bruno/O=IronPort Systems,Inc./CN=IronPort Appliance证书
服务器证书--剪短--
没有发送客户端证书CA名称
SSL握手已读取1771字节,写入了552字节。
新的,TLSv1 1/SSLv3 3,密码是DHE-RSA-美学256-SHA服务器公钥是1024位安全重新协商是支持压缩:无扩展:无SSL-会话:协议:TLSv1密码:DHE-rSA256-SHA-
我的解释是,mail.example.com提供的证书不是用于生产用途的.
有办法用OpenSSL1.0.1g处理这样的证书吗?mail.example.com是我遇到问题的几个通信伙伴之一。
谢谢泰迪
发布于 2014-04-11 02:56:24
环境迫使我从源代码编译openssl 1.0.1g,并且遇到了与上面报告的行为相同的行为。这是在费多拉18下的64位英特尔。与最初的海报报告一样,大多数邮件发送正常,但有一个邮件目的地遭遇了相同的TLS握手失败。
openssl更改日志(简要的CL 这里,详细的CL 这里)只显示了从1.0.1f到1.0.1g的三个变化:
我推测第三个变化是造成这个问题的原因,我在ssl/tls1.h中注释了一行,它似乎控制了这种"TLS填充“修改的存在,如下所示:
/* #define TLSEXT_TYPE_padding 21 */
再次编译,将库.so文件放在适当的位置,重新启动sendmail,然后排队的邮件就没有问题了。我希望我没有因此而打开新的问题。
发布于 2014-04-12 09:46:12
是的,有两个解决办法:
参考这里。
https://serverfault.com/questions/588125
复制相似问题