In meiner PHP-App verwende ich CURL und openssl von PHP, um eine Verbindung herzustellen und über SOAP zu sprechen. Bisher unterstützte der Remote-Server SSL und TLS, aber wegen des „Pudel“-Fehlers entschied sich der Administrator, SSL zu deaktivieren und nur TLS zu verwenden. SSL wird bis Ende Januar unterstützt.
Ich habe meinen Code geändert, indem ich hinzugefügt habe:
Das sollte Curl theoretisch dazu zwingen, TLSv1.2 zu verwenden.
Aber das ist Theorie – ich muss überprüfen, ob es tatsächlich TLS verwendet – gibt es dafür eine Methode? Es gibt eine Methode namens curl_getinfo(), aber die zurückgegebenen Informationen sind für mich nicht nützlich:
Sie können den Handshake mit einer Art Netzwerk-Sniffer untersuchen oder, wenn möglich, SSL und TLS 1.0 und 1.1 auf dem Server deaktivieren, damit es funktioniert hat um sich mit TLS 1.2 zu verbinden.
– vcsjones
12. Januar 2015 um 15:00 Uhr
Das Skript funktioniert auf einem Shared Hosting, daher gibt es keine Möglichkeit, es zu erschnüffeln. Ich habe Apache bereits auf meinem Entwicklungsserver gezwungen, TLS zu verwenden, und es funktioniert, aber ich habe keine Möglichkeit, es in der Produktion zu überprüfen. Nach ein paar Jahren der Verwendung von PHP fängt man an, nicht mehr alles als selbstverständlich zu betrachten. Ich brauche noch eine Möglichkeit, um “Sie verwenden TLS” auf dem Bildschirm anzuzeigen. Ich hatte auch ein Problem auf meinem Debian mit CURL_SSLVERSION_TLSv1_2, das nicht definiert war, und musste die Zeile ändern in: curl_setopt($objCurl, CURLOPT_SSLVERSION, 6);
das sollte ausgeben, welche TLS-Version für die Verbindung verwendet wurde.
Tiefer Graben
Curl verlässt sich auf die zugrunde liegende OpenSSL- (oder NSS-) Bibliothek, um die Aushandlung der sicheren Verbindung durchzuführen. Daher glaube ich, dass die richtige Frage hier lautet, wozu die OpenSSL-Bibliothek in der Lage ist. Wenn es eine TLS-Verbindung verarbeiten kann, kann curl eine TLS-Verbindung verarbeiten.
Wie kann man also herausfinden, wozu die openssl- (oder NSS-) Bibliothek in der Lage ist?
openssl enthält Unterstützung für TLS v1.1 und TLS v1.2 in OpenSSL 1.0.1
[14 Mar 2012]
NSS beinhaltete Unterstützung für TLS v1.1 in 3.14
NSS beinhaltete Unterstützung für TLS v1.2 in 3.15
Ich habe den curl zu howsmyssl gemacht und es kehrt zurück error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version. Es lehnt SSL v2/3 ab? twitter.com/jmhodges/status/420614636606468096. Was mache ich in diesem Fall?
– meder omuraliev
29. April 2016 um 18:13 Uhr
Mit der zweiten PHP-Logik zeigt mein Server „NSS/3.19.1 Basic ECC“ an, was Unterstützung für TLS v1.2 impliziert, aber die erste PHP-Logik gab „TLS 1.0“ zurück? Was muss ich tun, um TLS 1.2 zu unterstützen?
– Panofisch
1. Juni 2016 um 19:45 Uhr
Vergessen Sie meinen vorherigen Kommentar … Ich habe einfach den folgenden Code in die PHP-Logik Nr. 1 eingefügt und jetzt bekomme ich TLS 1.2 curl_setopt($ch, CURLOPT_SSLVERSION, 6);
– Panofisch
1. Juni 2016 um 19:53 Uhr
Es kann erforderlich sein, hinzuzufügen curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cert/file/cacert.pem'); Siehe http://stackoverflow.com/questions/9774349/…
– Amit Garg
17. Februar 2017 um 9:01 Uhr
Ich habe einen solchen Fehler erhalten: SSL certificate problem: unable to get local issuer certificate. Dies wurde (vorübergehend) von behoben curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$ curl https://tlstest.paypal.com/
ERROR! Connection is using TLS version lesser than 1.2. Please use TLS1.2
$ ./src/curl https://tlstest.paypal.com/
PayPal_Connection_OK
Wenn Sie testen möchten, welches Protokoll für eine bestimmte URL (z. B. einen Zahlungs-API-Endpunkt) verwendet wird, können Sie die ausführliche Ausgabe von curl protokollieren und dort anzeigen. Hier ist ein kurzes Beispiel:
Sie können den Handshake mit einer Art Netzwerk-Sniffer untersuchen oder, wenn möglich, SSL und TLS 1.0 und 1.1 auf dem Server deaktivieren, damit es funktioniert hat um sich mit TLS 1.2 zu verbinden.
– vcsjones
12. Januar 2015 um 15:00 Uhr
Das Skript funktioniert auf einem Shared Hosting, daher gibt es keine Möglichkeit, es zu erschnüffeln. Ich habe Apache bereits auf meinem Entwicklungsserver gezwungen, TLS zu verwenden, und es funktioniert, aber ich habe keine Möglichkeit, es in der Produktion zu überprüfen. Nach ein paar Jahren der Verwendung von PHP fängt man an, nicht mehr alles als selbstverständlich zu betrachten. Ich brauche noch eine Möglichkeit, um “Sie verwenden TLS” auf dem Bildschirm anzuzeigen. Ich hatte auch ein Problem auf meinem Debian mit CURL_SSLVERSION_TLSv1_2, das nicht definiert war, und musste die Zeile ändern in: curl_setopt($objCurl, CURLOPT_SSLVERSION, 6);
– Kayo
13. Januar 2015 um 8:43 Uhr