cURL stellt keine Verbindung zu HTTPS her, während wget dies tut (NSS-Fehler -12286)

8

NSS error -12286Beim Herunterladen einer Datei von HTTPS mit wird eine Fehlermeldung angezeigt curl.

Ich kann dieselbe Datei ohne Probleme herunterladen, um Probleme mit der wgetFirewall oder der Blacklist auszuschließen.

Bereits ausprobiert, ohne Glück, Optionen -kund --cipher ecdhe_ecdsa_aes_128_gcm_sha_256das ist die vom Qualys SSL Labs Test Server-Tool bevorzugte Verschlüsselung hier: https://www.ssllabs.com/ssltest/analyze.html?d=intribunale.net&latest

Hier ist das cURLProtokoll:

# curl -v https://www.intribunale.net/immobili
* About to connect() to www.intribunale.net port 443 (#0)
*   Trying 104.27.150.214... connected
* Connected to www.intribunale.net (104.27.150.214) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -12286
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error

Meine lib-Versionen sind:

# curl -V
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
Marco Marsala
quelle
Relevant: www-archive.mozilla.org/projects/security/pki/nss/ref/ssl/… wo es heißt, dass der NSS-Fehler -12286 bedeutet SSL_ERROR_NO_CYPHER_OVERLAP"Kann nicht sicher mit Peer kommunizieren: keine gemeinsamen Verschlüsselungsalgorithmen." Das lokale und das entfernte System haben keine gemeinsamen Verschlüsselungssuiten. Dies kann an einer Fehlkonfiguration an beiden Enden liegen. Dies kann daran liegen, dass ein Server falsch konfiguriert ist, um ein Nicht-RSA-Zertifikat mit dem RSA-Schlüsselaustauschalgorithmus zu verwenden.
Celada
2
Ich kann Ihr Problem mit CentOS6.7 curl-7.19.7-46.el6 nss-3.21.0-0.3.el6_7 auf einem Testserver reproduzieren. Standardmäßig werden keine ECC-Suites angeboten. Da Ihr Server (Cloudfare) nur bestimmte ECC-Suites (insbesondere ECDHE) akzeptiert, schlägt die Aushandlung fehl. Mit --cipher[s]dieser ECDHE Suite spezifiziert, ist es nicht einmal Client senden, schließt gerade die Verbindung und gibt den Fehler. Dies scheint intern nicht synchron zu sein, möglicherweise nach RedHats langer Ablehnung von ECC. RedHat wget verwendet OpenSSL, und das aktuelle RedHat OpenSSL unterstützt ECC (nur mit P256 P384 P521, aber das reicht hier aus).
dave_thompson_085
1
Meine erste Wahl wäre (0) nicht (diese) Locke verwenden, aber wenn Sie wirklich die Optionen sehen möchten, die ich sehe, sind: (1) Wenn Sie Unterstützung haben, melden Sie es als Fehler und hoffen Sie, dass sie es beheben. (2) es ist Open Source; Debuggen und beheben Sie es selbst. (3) es ist Open Source; Neuaufbau gegen openssl (anstelle von NSS), das funktionieren sollte. (4) stunnelRichten Sie (das openssl verwendet) als Plain-to-SSL ein, teilen Sie curl mit, http(notS)://localhost[:port]/whateveraber fügen Sie hinzu, -H "Host: realhost"damit der Zielserver den Unterschied nicht erkennen kann. ...
dave_thompson_085
1
... (5) ähnlich, aber offizieller: Richten Sie hier einen echten HTTP-Proxy mit openssl oder TLS1.2-ECDHE-kompatibles SSL / TLS auf einem anderen System in Ihrer Kontrolle ein, möglicherweise sogar eine VM auf Ihrem realen Computer wie HAproxy oder nginx oder sogar httpd, zu dem Sie eine Verbindung mit einfachem HTTP oder zumindest Nicht-ECDHE-HTTPS herstellen, das jedoch mit gutem ECDHE-HTTPS an den realen Server weitergeleitet wird.
dave_thompson_085
1
NSS Upstream unterstützt ECDHE definitiv schon lange. RedHat seit Jahren bis Ende 2014 entfernt (alle Varianten von) ECC aus ihrem von Krypto - Paketen bauen (AFAIK alle, auf jedem Fall OpenSSL NSS OpenJDK) für vagee ‚legale‘ Gründe, die über I ‚lange Verleugnung‘ genannt. Ich vermute, als sie es zurücklegten, machten sie einen wahrscheinlich geringfügigen Fehler, der diesen Curl / NSS-Fall betraf. Ich kenne keine andere Distribution, die dies getan hat, aber es gibt viele und jemand könnte; In dem Ubuntu, das ich derzeit habe, 14.04LTS Trusty, verwendet Curl OpenSSL und unterstützt ECDHE.
dave_thompson_085

Antworten:

8

Die Lösung bestand darin, ein Upgrade auf cURL 7.42 mithilfe eines Drittanbieter-Repositorys für CentOS 6 durchzuführen oder aus Quellen zu erstellen

Marco Marsala
quelle
14
Ein Upgrade des nss-Pakets (dh yum update nss) oder dessen Verwendung curl -1kann dies ebenfalls lösen.
DiegoG
1
Vielen Dank! Ich bin auf dieses Problem gestoßen, weil der Server tlsv1.2 benötigt. Upgrade hat mein Problem gelöst.
hao
Das Aktualisieren des NSS soll dieses Problem beheben
Sơn Lâm
4

Wir hatten das gleiche Problem mit Curl 7.19.7. Wir haben NSS aktualisiert und das Problem wurde behoben!

Jacob Klein
quelle
0

Unter CentOS 6 mit dem neuesten openssl-Paket (1.0.1e) sollten Sie nss (yum update nss) aktualisieren, wie DiegoG oben geschrieben hat. Der Befehl update-ca-trust kann ebenfalls hilfreich sein. Wenn Sie Curl über PHP verwenden, starten Sie den Webserver-Prozess / -Dienst neu (dh den Dienst httpd restart).

userK
quelle