Debian Wheezy 升级后,Perl 的 LWP 中出现 SSL 问题

Debian Wheezy 升级后,Perl 的 LWP 中出现 SSL 问题

我刚刚从 Lenny 升级到 Debian Wheezy(长话短说),但我的一些 Perl 包由于某种原因没有升级,其中包括 Crypt::SSLeay(libcrypt-ssleay-perl)。

在安装 libcrypt-ssleay-perl 之前,我无法使用 LWP 连接到我的信用卡支付网关,现在它可以“工作”了,但由于出现非常无用的错误消息“未知状态错误”,因此需要 15-20 秒才能建立 SSL 连接:

SSL_connect:before/connect 初始化
SSL_connect:未知状态
(等待 15-20 秒...)#此评论来自 waldo22
SSL_connect:未知状态下的错误
SSL_connect:before/connect 初始化
SSL_connect:SSLv3 写入客户端 hello A
SSL_connect:SSLv3 读取服务器 hello A
SSL_connect:SSLv3 读取服务器证书 A
SSL_connect:SSLv3 读取服务器完成 A
SSL_connect:SSLv3 写入客户端密钥交换 A
SSL_connect:SSLv3 写入更改密码规范 A
SSL_connect:SSLv3 写入完成 A
SSL_connect:SSLv3 刷新数据
SSL_connect:SSLv3 读取完成 A

我觉得这与 LWP 改变证书颁发机构和服务器证书验证的默认行为有关:
https://stackoverflow.com/questions/74358/how-can-i-get-lwp-to-validate-ssl-server-certificates#5329129
可能还有:
https://stackoverflow.com/questions/5639803/aws-ses-certificate-verify-failed

我的 Perl 模块正在使用地穴::SSLeay通过LWP::用户代理

显然,等待 15-20 秒建立 SSL 连接的时间太长了,但如果没有更有用的错误消息,我不知道该怎么办。

有人对如何更好地调试这个问题或获得更详细的输出有什么建议吗?

非常感谢,

-韦斯

答案1

哇,这个真是太棒了。

那里出现OpenSSL 1.0.1 存在一个问题,即尝试与某些服务器(编辑:运行固件 < 10.2.4 的 BigIP 服务器)自动协商 TLS1.1(或 1.2???)会导致这些服务器断开连接并拒绝请求。请参阅:

https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665452

我正在尝试连接到 Paypal 的“Payflow Pro”信用卡网关,Paypal 最初是列表中的主要罪魁祸首之一。

根据错误单,他们说这个问题在 1.0.1b 中已在 Paypal 中“修复”,但我在运行 1.0.1c-3 时仍然遇到该问题。我不知道这是否意味着它已在 中修复,www.paypal.com但 中没有payflowpro.paypal.com,或者其他什么。

解决方法:设置$ENV{HTTPS_VERSION} = 3为强制 SSL3 似乎可以解决问题,至少对于地穴::SSLeay

据推测这是可行的,因为它不尝试协商 TLS1.1,而只是使用 SSL3。

使用 openssl s_client 进行测试,它可以与选项-ssl3-tls1和一起使用-no_tls1,因此在我看来,这一定是一个协商问题。

无论如何,这至少是一种解决方法。

实际问题是由版本低于 10.2.4 的 F5 BigIP 负载均衡器固件中的错误引起的。这导致 TLS 1.1 或 1.2 连接无法正确响应较长的 ClientHello 请求,从而挂起。

真实的修复方法是将 BigIP 负载均衡器上的固件更新至 >= 10.2.4。

当然,Paypal/Payflow 将此归咎于 OpenSSL......

相关内容