Je ne parviens pas à créer une URL HTTPS utilisant TLS1.2; lors de mon opération curl, je publie mes informations de connexion sur le site Web et les enregistre dans le fichier cookiefile . Le message d'erreur que je reçois est le suivant.
error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error
J'ai essayé de mettre VERIFYPEER
et VERIFYHOST
à 0 mais cela ne semble pas fonctionner, des suggestions?
Voici les versions que j'utilise:
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 une valeur entière pour la valeur CURLOPT_SSLVERSION
, pas une chaîne comme indiqué ci-dessus
Essaye ça:
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 6); //Integer NOT string TLS v1.2
http://php.net/manual/en/function.curl-setopt.php
valeur doit être un entier pour les valeurs suivantes du paramètre option: CURLOPT_SSLVERSION
Un des
CURL_SSLVERSION_DEFAULT (0)
CURL_SSLVERSION_TLSv1 (1)
CURL_SSLVERSION_SSLv2 (2)
CURL_SSLVERSION_SSLv3 (3)
CURL_SSLVERSION_TLSv1_0 (4)
CURL_SSLVERSION_TLSv1_1 (5)
CURL_SSLVERSION_TLSv1_2 (6).
TLS 1.1 et TLS 1.2 sont pris en charge depuis OpenSSL 1.0.1
Forcer TLS 1.1 et 1.2 n'est pris en charge que depuis curl 7.34.0
Vous devriez envisager une mise à niveau.
J'ai un problème similaire dans le contexte de Stripe:
Erreur: Stripe ne prend plus en charge les requêtes API effectuées avec TLS 1.0 . Veuillez établir des connexions HTTPS avec TLS 1.2 ou une version ultérieure. Tu peux apprendre plus à ce sujet à https://stripe.com/blog/upgrading-tls .
Forcer TLS 1.2 à l'aide du paramètre CURL est une solution temporaire, voire impossible à appliquer faute de place pour mettre à jour une mise à jour. Par défaut, la fonction de test TLS https://Gist.github.com/olivierbellone/9f93efe9bd68de33e9b3a3afbd3835cf a présenté la configuration suivante:
SSL version: NSS/3.21 Basic ECC
SSL version number: 0
OPENSSL_VERSION_NUMBER: 1000105f
TLS test (default): TLS 1.0
TLS test (TLS_v1): TLS 1.2
TLS test (TLS_v1_2): TLS 1.2
J'ai mis à jour les bibliothèques en utilisant la commande suivante:
yum update nss curl openssl
et ensuite vu ceci:
SSL version: NSS/3.21 Basic ECC
SSL version number: 0
OPENSSL_VERSION_NUMBER: 1000105f
TLS test (default): TLS 1.2
TLS test (TLS_v1): TLS 1.2
TLS test (TLS_v1_2): TLS 1.2
Veuillez noter que la version par défaut de TLS a été remplacée par la version 1.2! Ce problème globalement résolu. Cela aidera également les utilisateurs de Paypal: https://www.Paypal.com/au/webapps/mpp/tls-http-upgrade (mise à jour avant la fin juin 2017)
Remplacer suivant
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2');
Avec
curl_setopt ($ch, CURLOPT_SSLVERSION, 6);
Devrait fonctionner parfaitement.
TLS 1.2
n’est pris en charge que depuis OpenSSL 1.0.1
(voir la section Major versions release ), vous devez mettre à jour votre OpenSSL
.
Il n'est pas nécessaire de définir l'option CURLOPT_SSLVERSION
. La demande implique une poignée de main qui appliquera la version la plus récente de TLS
aux supports serveur et client. Le serveur que vous demandez utilise TLS 1.2
, votre php_curl
utilisera donc TLS 1.2
(par défaut) également si votre version OpenSSL
est (ou plus récente que) 1.0.1
.