PayPal IPN OPENSSL 错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败

Posted

技术标签:

【中文标题】PayPal IPN OPENSSL 错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败【英文标题】:PayPal IPN OPENSSL error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure 【发布时间】:2016-05-04 00:21:03 【问题描述】:

我当前的 php 版本是 5.3。最近我把它从 5.2 更新到了 5.3

我在谷歌上搜索过,我找不到任何关于 PayPal IPN 验证的解决方案。

我看到我的phpinfo() 启用了 OPenSSL,但我仍然收到此错误消息 -

Warning: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure in /home/xxx/public_html/paypal_test/socketopen.php on line 5

Warning: fsockopen() [function.fsockopen]: Failed to enable crypto in /home/xxx/public_html/paypal_test/socketopen.php on line 5

Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://www.sandbox.paypal.com:443 (Unknown error) in /home/xxx/public_html/paypal_test/socketopen.php on line 5
()

我的代码是 -

<?php
$fp = fsockopen ( 'ssl://www.sandbox.paypal.com', "443", $err_num, $err_str, 60);
if (!$fp) 
    echo "$errstr ($errno)<br />\n";
 else 
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.sandbox.paypal.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) 
        echo fgets($fp, 128);
        echo "<br>";
    
    fclose($fp);

?>

我在不同的服务器上使用了相同的代码,这段代码运行良好。但这在我自己的服务器上不起作用。请检查以下两个屏幕截图 -

实际输出 -

我的输出 -

我读了php-paypal-error: 14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure,但没有得到任何确切的解决方案。请检查并告诉我。

谢谢。

【问题讨论】:

【参考方案1】:

根据SSLLabs,此服务器仅支持 TLS 1.2,即不支持 TLS 1.1、TLS 1.0 或 SSL 3.0。

我当前的 PHP 版本是 5.3。最近我把它从 5.2 更新到了 5.3

鉴于您使用的是相当旧版本的 PHP,您很有可能也在使用旧版本的 OpenSSL。仅在 OpenSSL 1.0.1 版中添加了对 TLS 1.2 的必要支持。要找出您正在使用的版本,您可以使用

 php -r 'printf("0x%x\n", OPENSSL_VERSION_NUMBER);'

这应该至少返回 0x10001000(即版本 1.0.1)。以下任何内容都不支持 TLS 1.2。

【讨论】:

这里是我的 openssl 版本的详细信息 - OpenSSL Library Version OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008OpenSSL Header Version OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008 printf("0x%x\n", OPENSSL_VERSION_NUMBER); 我得到了0x90802f @Chinu:正如我所料,您使用的是非常旧的 OpenSSL 版本,它不支持 TLS 1.2。您至少需要使用 1.0.1 版本,而不是当前使用的旧版本 0.9.8。

以上是关于PayPal IPN OPENSSL 错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败的主要内容,如果未能解决你的问题,请参考以下文章

PayPal IPN 侦听器 - SSL 证书握手失败

POODLE 更新后,PayPal IPN 停止使用 Tomcat/Open SSL

无法接收 PayPal IPN - PayPal 总是收到 403 错误

PayPal IPN PHP 握手错误

PayPal IPN 错误和自定义端口 IPN URL

Django-Paypal IPN 403 错误