wake-up-neo.com

TLS 1.2 funktioniert nicht in cURL

Ich habe Probleme, eine HTTPS-URL zu erzeugen, die TLS1.2 verwendet. In meiner Curl-Operation gebe ich meine Anmeldedaten in die Website ein und speichere sie in cookiefile ..__ 

 error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

Ich habe versucht, VERIFYPEER und VERIFYHOST auf 0 zu setzen, aber das scheint nicht zu funktionieren, irgendwelche Vorschläge?

Hier sind die Versionen, die ich verwende:

  • Die OpenSSL-Version ist 0.9.8b
  • Die CURL-Version ist 7.24.0
  • PHP ist 5,3 

Hier ist der 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);
21
Sam Ash

Sie müssen einen ganzzahligen Wert für den CURLOPT_SSLVERSION-Wert verwenden, not eine Zeichenfolge wie oben aufgeführt

Versuche dies:

curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 6); //Integer NOT string TLS v1.2

http://php.net/manual/de/function.curl-setopt.php

value sollte eine ganze Zahl für die folgenden Werte des Optionsparameters sein: CURLOPT_SSLVERSION 

Einer von

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). 

47
Jeff

TLS 1.1 und TLS 1.2 werden seit OpenSSL 1.0.1 unterstützt.

Das Erzwingen von TLS 1.1 und 1.2 wird nur seit curl 7.34.0 unterstützt.

Sie sollten ein Upgrade in Betracht ziehen.

22
umka

Ich habe ein ähnliches Problem im Zusammenhang mit Stripe:

Fehler: Stripe unterstützt keine API-Anforderungen mehr, die mit TLS 1.0 ..__ erstellt wurden. Bitte initiieren Sie HTTPS-Verbindungen mit TLS 1.2 oder höher. Du kannst lernen Mehr dazu unter https://stripe.com/blog/upgrading-tls .

Das Erzwingen von TLS 1.2 mit dem CURL-Parameter ist eine vorübergehende Lösung oder kann nicht angewendet werden, da zu wenig Platz für ein Update vorhanden ist. Standardmäßig zeigte die TLS-Testfunktion https://Gist.github.com/olivierbellone/9f93efe9bd68de33e9b3a3afbd3835cf folgende Konfiguration an:

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

Ich habe Bibliotheken mit folgendem Befehl aktualisiert:

yum update nss curl openssl

und sah dann folgendes:

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

Bitte beachten Sie, dass die Standard-TLS-Version auf 1.2 geändert wurde! Das global gelöste Problem. Dies wird auch Paypal-Benutzern helfen: https://www.Paypal.com/au/webapps/mpp/tls-http-upgrade (Update vor Ende Juni 2017)

12

Folgendes ersetzen

curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2');

Mit

curl_setopt ($ch, CURLOPT_SSLVERSION, 6);

Sollte einwandfrei funktionieren.

1
Tauseef

TLS 1.2 wird nur unterstützt, da OpenSSL 1.0.1 (siehe Release-Version der Major-Version ) Ihre OpenSSL aktualisieren muss.

Es ist nicht erforderlich, die Option CURLOPT_SSLVERSION einzustellen. Die Anforderung beinhaltet einen Handshake, der die neueste TLS-Version sowohl des Servers als auch des Clients unterstützt. Der von Ihnen angeforderte Server verwendet TLS 1.2. Daher wird php_curl (standardmäßig) auch für TLS 1.2 verwendet, wenn Ihre OpenSSL-Version (oder neuer) 1.0.1 ist.

0
shintaroid