【发布时间】:2020-07-13 22:32:54
【问题描述】:
我有一个 perl 脚本,它使用 CPAN Mail::Box::POP3s 包从 pop.gmail.com:995 下载电子邮件。执行此操作的源代码是:
my $pop = Mail::Box::POP3s->new(username => $recordsUser,
password => $recordsPassword,
server_name => $pop3Server);
my($nrOfMsgs) = $pop->nrMessages;
print "Received $nrOfMsgs\n";
在一个 Windows 10 系统上,这可以完美运行。 但另一方面它失败了,签名:
DEBUG: .../IO/Socket/SSL.pm:1890: new ctx 76411024
DEBUG: .../IO/Socket/SSL.pm:393: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:395: socket connected
DEBUG: .../IO/Socket/SSL.pm:413: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:443: using SNI with hostname pop.gmail.com
DEBUG: .../IO/Socket/SSL.pm:479: Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:1359: SSL connect attempt failed with unknown error
DEBUG: .../IO/Socket/SSL.pm:485: fatal SSL error: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
DEBUG: .../IO/Socket/SSL.pm:1924: free ctx 76411024 open=76411024
DEBUG: .../IO/Socket/SSL.pm:1932: OK free ctx 76411024
ERROR: Cannot connect to pop.gmail.com:995 for POP3: Bad file descriptor
ERROR: Cannot create POP3 client for inbox.
Can't call method "nrMessages" on an undefined value at ./emailToNotes.pl line 110.
这两个系统都运行带有 Active Perl 5.16.3 的 Windows10 Pro(截至 2019 年更新)。 在有效的系统上,我有: IO::Socket::SSL 版本 1.84 Net::SSLeay 1.52 版 OpenSSL 1.02 版 在失败的系统上,我有: IO::Socket::SSL 版本 1.962 Net::SSLeay 1.55 版 Openssl 版本 1.1.1d 查看网络上所有先前提到的这种错误综合症,我尝试了: - 修补 IO::Socket::SSL 以将 $can_client_sni 设置为 0 - 从https://curl.haxx.se/ca/cacert.pem 下载受信任的 CA 链,并通过调用 Net::SSLeay::X509_STORE_add_crl 将其添加到 Net::SSLeay 这些都不能解决问题。 两个系统的 Windows 10 的唯一区别是,工作系统在 2018 年安装了 Windows 10 Pro,而新系统是 2 周前才购买的。 我已经尝试了 2 天不同的解决方案,并且肯定可以从 Steffen Ullrich 等专家那里获得一些帮助。 提前致谢。
【问题讨论】:
-
Net::SSLeay::X509_STORE_add_crl不会添加任何受信任的证书,但会添加 CRL。此外,还不清楚您在这里使用了哪个 SSL 存储。