TLS 1.2 ne fonctionne pas dans cURL
J'ai de la difficulté curling une url HTTPS qui utilise TLS1.2, dans mon curl opération je poste mes données de connexion sur le site web et le sauver dans cookiefile.
Le message d'erreur que j'obtiens est-ce
error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error
J'ai essayé de réglage VERIFYPEER
et VERIFYHOST
à 0 mais cela ne semble pas fonctionner, des suggestions?
Voici les versions que je suis en utilisant:
- OpenSSL version 0.9.8 b
- CURL version est 7.24.0
- PHP 5.3
Voici le code:
$setuplogin = curl_init();
curl_setopt ($setuploginurl, CURLOPT_URL, $url);
curl_setopt ($setuploginurl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt ($setuploginurl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt ($setuploginurl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2');
curl_setopt ($setuploginurl, CURLOPT_POSTFIELDS, 'username=uname&password=pword&act=login&submit=Login');
curl_setopt ($setuploginurl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36");
curl_setopt (setuploginurl, CURLOPT_TIMEOUT, 60);
curl_setopt ($setuploginurl, CURLOPT_COOKIESESSION, TRUE);
curl_setopt ($setuploginurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($setuploginurl, CURLOPT_HEADER, 1);
curl_setopt ($setuploginurl,CURLOPT_ENCODING,"gzip");
curl_setopt ($setuploginurl, CURLOPT_POST, true);
curl_setopt ($setuploginurl, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt ($setuploginurl, CURLOPT_FRESH_CONNECT , 1);
$loginp= curl_exec($setuploginurl);
if ($loginp === FALSE) {
die(curl_error($setuploginurl));
}
curl_close ($setuploginurl);
var_dump ($loginp);
- Vous devez utiliser 2 pour CURLOPT_SSL_VERIFYHOST, pas 1.
- Je ne sais pas si c'est automatique, mais le passage à PHP v 5.6.33 résolu mon problème.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser une valeur entière pour la
CURLOPT_SSLVERSION
valeur, pas une chaîne comme indiqué ci-dessusEssayez ceci:
http://php.net/manual/en/function.curl-setopt.php
valeur doit être un entier pour les valeurs suivantes de l'option de paramètre:
CURLOPT_SSLVERSION
L'un des
CURL_SSLVERSION_TLSv1_2
- a juste besoin d'être une constante, c'est à dire, pas dans les citations.curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
fonctionne pour moi.TLS 1.1 et TLS 1.2 sont pris en charge depuis OpenSSL 1.0.1
Forcer TLS 1.1 et 1.2 ne sont pris en charge depuis curl 7.34.0
Vous devriez envisager la mise à niveau.
J'ai a un problème similaire dans le contexte de la Bande:
Forcer TLS 1.2 utilisation de CURL paramètre est solution temporaire ou même qu'il ne peut pas être appliquée en raison de manque de place pour placer une mise à jour. Par défaut TLS fonction de test https://gist.github.com/olivierbellone/9f93efe9bd68de33e9b3a3afbd3835cf a montré la configuration suivante:
J'ai mis à jour les bibliothèques à l'aide de la commande suivante:
et puis vu ce:
Veuillez noter que par défaut TLS version modifiée à 1,2! Globalement résolu le problème. Cela aidera les utilisateurs de PayPal trop: https://www.paypal.com/au/webapps/mpp/tls-http-upgrade (mise à jour avant la fin du mois de juin 2017)
Remplacer suivantes
Avec
Devrait fonctionner parfaitement.
TLS 1.2
est uniquement pris en charge depuisOpenSSL 1.0.1
(voir la Versions majeures section), vous devez mettre à jour votreOpenSSL
.Il n'est pas nécessaire de définir la
CURLOPT_SSLVERSION
option. La demande a trait à une poignée de main qui va s'appliquer le plus récentTLS
version du serveur et du client de support. Le serveur vous demande de l'aideTLS 1.2
, de sorte que votrephp_curl
utiliseraTLS 1.2
(par défaut) et si votreOpenSSL
version est (ou supérieur)1.0.1
.