一个运行正常两年的perl脚本刚刚开始返回" 500 SSL握手失败"回发IPN消息时的错误。我的主机服务支持SHA 256,TLS 1.2和HTTP / 1.1。我正在使用我的主机服务的共享证书。 代码(来自PayPal&#39的示例脚本):
# read post from PayPal system and add 'cmd'
read (STDIN, $query, $ENV{'CONTENT_LENGTH'});
$query .= '&cmd=_notify-validate';
# post back to PayPal system to validate
$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 1 });
$req = HTTP::Request->new('POST', 'https://www.sandbox.paypal.com/cgi-bin/webscr');
$req->content_type('application/x-www-form-urlencoded');
$req->header(Host => 'www.sandbox.paypal.com');
$req->content($query);
$res = $ua->request($req);
if ($res->is_error) {
# HTTP error
$retmsg = "HTTP Error:<br />";
$retmsg .= $res->status_line();
}
...
我如何才能最好地解决此问题?
答案 0 :(得分:1)
根据SSLLabs,该网站仅为TLS 1.2,它不接受TLS 1.0或TLS 1.1。根据您的评论,您使用的是OpenSSL版本1.0.0e(1000005f)。但是这个版本还不支持TLS 1.2,因为这种支持仅在版本1.0.1中添加。
这意味着您的系统太旧而无法支持TLS 1.2。您需要至少升级OpenSSL版本,但最好是整个系统。请注意,仅安装新版本的OpenSSL没有帮助。相反,您需要重新编译Perl中使用该库的所有模块,例如在这种情况下尤其是Net :: SSLeay。