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

Raz*_*eem 5 php ssl curl paypal server

$ch = curl_init();
$clientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$secret);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
Run Code Online (Sandbox Code Playgroud)

这段代码在本地主机上工作,但是当我在实时服务器上测试时,它会给我这个错误错误:错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败然后我尝试了这个

<?php
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://tlstest.paypal.com/"); 
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
var_dump(curl_exec($ch));
if ($err = curl_error($ch)) {
var_dump($err);
echo "DEBUG INFORMATION:\n###########";
echo "CURL VERSION";
echo json_encode(curl_version(), JSON_PRETTY_PRINT);
}?>
Run Code Online (Sandbox Code Playgroud)

github.com/paypal/TLS-update/tree/master/php 这将再次在本地主机上工作并在现场它给了我这个

error bool(false)
string(67) "Unknown SSL protocol error in connection to tlstest.paypal.com:443 "
DEBUG INFORMATION:
###########CURL VERSION
Run Code Online (Sandbox Code Playgroud)

我的服务器有这些证书

服务器密钥和证书 #1

Subject *.secure.xxxxxxxx.com


Fingerprint SHA1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Pin SHA256: S4/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Common names    *.secure.xxxxxxxx.com   MISMATCH


Alternative names   *.secure.xxxxxxx.com



Key RSA 2048 bits (e 65537)


Weak key (Debian)   No


Issuer  Symantec Class 3 Secure Server CA - G4


AIA: xxxxxxx/ss.crt


Signature algorithm SHA256withRSA


Extended Validation No


Certificate Transparency    Yes (certificate)


OCSP Must Staple    No


Revocation information  CRL, OCSP


CRL: xxxxxx/ss.crl


OCSP: xxxxxxxxx


Revocation status   Good (not revoked)

Trusted No   NOT TRUSTED (Why?)
Run Code Online (Sandbox Code Playgroud)

#2

Subject Symantec Class 3 Secure Server CA - G4


Fingerprint SHA1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Pin SHA256: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Key RSA 2048 bits (e 65537)


Issuer  VeriSign Class 3 Public Primary Certification Authority - G5


Signature algorithm SHA256withRSA
Run Code Online (Sandbox Code Playgroud)

#3

Subject VeriSign Class 3 Public Primary Certification Authority - G5


Fingerprint SHA1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Pin SHA256: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Key RSA 2048 bits (e 65537)


Issuer  VeriSign, Inc. / Class 3 Public Primary Certification Authority

Signature algorithm SHA1withRSA   WEAK

**Protocols**


TLS 1.2 Yes


TLS 1.1 Yes


TLS 1.0 Yes


SSL 3   No


SSL 2   No
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

检查要求

Dre*_*ell 1

您的服务器可能支持 TLS 1.2,但您需要确保 HTTP 请求实际上正在使用它。根据您得到的结果,您显然没有在请求中使用 TLS 1.2。

\n

尝试将其添加到您的 cURL 选项中:

\n
curl_setopt($ch, CURLOPT_SSLVERSION, 6);\n
Run Code Online (Sandbox Code Playgroud)\n

这将强制使用 TLS 1.2。

\n

或者,更新您的服务器软件堆栈,这将自动发生。有关更多详细信息,请参阅这篇文章,最重要的是这部分:

\n
\n

如果您想使用 TLS 1.2,您\xe2\x80\x99 至少需要升级到 OpenSSL 1.0.1,然后您\xe2\x80\x99 将能够将 CURLOPT_SSLVERSION 设置为 6 (TLS 1.2)。

\n

如果您希望在 SSL 请求期间自动使用 TLS 1.2,您\xe2\x80\x99 还需要升级到 PHP 5.5.19+(这是理想的解决方案,但许多项目仍然使用较旧的 PHP 版本)。

\n
\n