Ich versuche, eine POST-Anfrage per Curl an einen Server zu senden, der nur TLS 1.2, TLS 1.1 und TLS 1.0 unterstützt. Selbst wenn ich versuche, die Notwendigkeit für TLS anstelle von SSL v. 3 (Hinzufügen von --- tlsv1) anzugeben, erhalte ich die folgende Antwort:
curl: (35) error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
Dies ist die Version von Curl, die ich verwende:
curl 7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Es gibt keine Firewall-Probleme beim Auflösen der URL.
Wie kann ich den POST erfolgreich machen?
Update: Ich habe auch versucht, die Anfrage mit Python zu stellen, um herauszufinden, was das Problem ist. Die URL ist intern, so dass ich das nicht teilen kann, aber Hilfe wäre dankbar, was das Konfigurationsproblem sein könnte. Hier ist der Python-Fehler:
urllib2.URLError: <urlopen error (1, 'error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure')>
Antworten:
Schwer zu sagen, was das Problem ist, ohne die genaue URL zu kennen. In Anbetracht der von Ihnen verwendeten Curl-Version kann es jedoch sein, dass der Server eine Server Name Indication (SNI) benötigt, die von der von Ihnen verwendeten alten Curl-Version nicht unterstützt wird.
quelle
Der "Handshake" -Fehler weist darauf hin, dass Client und Server sich nicht darauf einigen konnten, wie der für HTTPS erforderliche sichere Kanal eingerichtet werden soll. Die Version von OpenSSL, die Sie verwenden, ist sehr alt und versteht nur SSL bis zu sslv3, das der Server mindestens benötigt. Daher der "sslv3" -Fehler - er informiert Sie darüber, dass SSL v3 (weniger als TLS v1) verwendet wurde und keine aussagekräftige Antwort erhalten wurde.
Ohne ein Upgrade auf eine neuere Version von OpenSSL haben Sie Pech, und selbst dann muss die Curl-Version möglicherweise auch gestoßen werden, um mit der neueren TLS-Version fertig zu werden.
quelle