$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);
ce code fonctionne sur localhost mais quand je teste sur mon serveur live il me donne cette erreur Erreur: erreur: 14077410: routines SSL: SSL23_GET_SERVER_HELLO: échec de la poignée de main d'alerte sslv3 puis j'ai essayé
<?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);
}?>
github.com/Paypal/TLS-update/tree/master/php ceci fonctionnera à nouveau sur localhost et sur live, il me le donne
error bool(false)
string(67) "Unknown SSL protocol error in connection to tlstest.Paypal.com:443 "
DEBUG INFORMATION:
###########CURL VERSION
mon serveur a ces certificats
Clé de serveur et certificat n ° 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?)
# 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
# 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
exigences vérifiées à
Votre serveur peut prendre en charge TLS 1.2, mais vous devez vous assurer que les requêtes HTTP l’utilisent réellement. En fonction du résultat obtenu, vous n'utilisez apparemment pas TLS 1.2 avec les demandes.
Essayez d'ajouter ceci à vos options cURL:
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
Cela forcera TLS 1.2.
Vous pouvez également mettre à jour la pile de logiciels de votre serveur et cela se fera automatiquement. Voir cet article pour plus de détails, principalement cette partie:
Si vous souhaitez utiliser TLS 1.2, vous devez au minimum passer à OpenSSL 1.0.1, puis vous pourrez définir CURLOPT_SSLVERSION sur 6 (TLS 1.2).
Si vous souhaitez que TLS 1.2 soit utilisé automatiquement lors des requêtes SSL, vous devez également mettre à niveau vers PHP 5.5.19+ (c'est la solution idéale, mais de nombreux projets sont encore sur des versions plus anciennes PHP). .
TL; TR: votre logiciel est trop ancien pour prendre en charge ces serveurs.
Les deux serveurs prennent en charge TLS 1.2 uniquement, comme le montre la vérification avec SSLLabs . Votre version OpenSSL est 1.0.0s et ne supporte pas encore TLS 1.2. Le support n'est disponible que depuis la version 1.0.1.
mon serveur a ces certificats ...
La configuration de votre serveur Web (certificats, versions TLS, etc.) n’est pas pertinente car, dans ce cas, vous êtes le client qui se connecte à un autre serveur.
Nous avions le même problème avec l’API stamps.com et dans notre cas au moment de cette publication, la solution consistait à définir le CURLOPT_SSLVERSION
sur 5
.
curl_setopt($ch, CURLOPT_SSLVERSION, 5);