【发布时间】:2015-01-05 12:17:45
【问题描述】:
[在 OS X 10.9.5 上运行 perl 5.16.2]
我有一个小秘密圣诞老人 perl 脚本,我每年刷一次,现在这一次决定给我带来麻烦。 (我也有一台新电脑,所以确实存在与去年不同的环境。)我打电话:
$smtp = Net::SMTP::SSL->new(Host => "mail.mydomain.org", Port => 465);
当它返回时,$smtp 不包含任何值(perl 调试器中的'p $smtp' 只显示一个空行),随后的访问如$stmp->domain(和$smtp->auth())失败并出现错误
Can't call method "domain" on an undefined value at ./secretsanta.pl line 67.
我在这里缺少什么?感谢您的任何指点。
编辑:当我打开 SSL 调试 (perl -MIO::Socket::SSL=debug4 secretsanta.pl) 我得到:
DEBUG: .../IO/Socket/SSL.pm:1769: Invalid default certificate authority locations
SSL error: 8606: 1 - error:2006D002:BIO routines:BIO_new_file:system lib
SSL error: 8606: 2 - error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
DEBUG: .../IO/Socket/SSL.pm:1774: Invalid default certificate authority locations error:0200100D:system library:fopen:Permission denied
DEBUG: .../IO/Socket/SSL.pm:529: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:531: socket connected
DEBUG: .../IO/Socket/SSL.pm:553: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:1769: SSL structure creation failed
DEBUG: .../IO/Socket/SSL.pm:1774: SSL structure creation failed error:140BA0C3:SSL routines:SSL_new:null ssl ctx
DEBUG: .../IO/Socket/SSL.pm:1758: IO::Socket::INET configuration failed
(我正在使用我的托管公司提供的 SSL 证书,它与我的邮件服务器的 DNS 名称不匹配,但显然与去年相比发生了一些变化,导致它无法正常工作。)
【问题讨论】:
-
检查
$!和$IO::Socket::SSL::SSL_ERROR以获取失败原因的详细信息。 -
@SteffenUllrich
$!为空,$IO::Socket...为IO::Socket::INET6 configuration failed -
@SteffenUllrich 我刚刚在脚本开头尝试了
use IO::Socket::SSL 'inet4';,现在错误是IO::Socket::INET configuration failed -
我是否有可能安装了“错误”版本的
IO::Socket::SSL或Net::SMTP::SSL?确认这一点的最佳方法是什么? -
您使用哪些版本?您可以检查版本打印
class->VERSION,例如perl -MIO::Socket::SSL -e 'die IO::Socket::SSL->VERSION'。此外,尝试使用 SSL 调试运行您的代码,即perl -MIO::Socket::SSL=debug4 app.pl并发布结果。如果您可以发布真实的目标主机名,我可以进行更多调试。