Ich bin neu in der Curl and Cacerts-Welt und habe ein Problem beim Herstellen einer Verbindung zu einem Server. Grundsätzlich muss ich die Konnektivität über https von einem Computer zu einem anderen Computer testen. Ich habe eine URL, zu der ich eine Verbindung von Maschine A (einer Linux-Maschine) herstellen muss. Ich habe dies an der Eingabeaufforderung versucht
cmd> curl https://[my domain or IP address]
und bekam folgendes:
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Als ich einige Artikel über das Internet durchgesehen habe, habe ich Folgendes getan:
openssl s_client -connect <domain name or Ip address>:443
und erhielt eine Antwort einschließlich des Serverzertifikats (innen -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
).
Was soll ich als nächstes von hier aus tun? Ich denke, ich muss nur kopieren, den Text einfügen
BEGIN CERTIFICATE & END CERTIFICATE
und in einer Datei speichern. Aber welche Art von Datei sollte es sein? .pem
, .crt
? .. Was soll ich danach tun werden?
Ich habe dies versucht - habe den Text darin kopiert BEGIN CERTIFICATE & END CERTIFICATE
und in einer .crt
Datei gespeichert - habe ihn benannt my-ca.crt
(habe auch das Gleiche versucht, indem ich ihn als my-ca.pem
Datei benannt habe) und dann Folgendes getan:
cmd>curl --cacert my-ca.crt https://[my domain or IP address]
Habe aber den gleichen Fehler.
quelle
--insecure
um den SSL-Fehler zu ignorieren.Antworten:
Ich hatte das gleiche Problem - ich habe eine Seite von meiner eigenen Site abgerufen, die über HTTPS bereitgestellt wurde, aber curl hat die gleiche Meldung "SSL-Zertifikatsproblem" ausgegeben. Ich habe es umgangen, indem ich
-k
dem Anruf ein Flag hinzugefügt habe , um unsichere Verbindungen zuzulassen.Bearbeiten: Ich habe die Wurzel des Problems entdeckt. Ich habe ein SSL-Zertifikat verwendet (von StartSSL, aber ich denke nicht, dass das wichtig ist) und das Zwischenzertifikat nicht ordnungsgemäß eingerichtet. Wenn Sie das gleiche Problem wie oben bei user1270392 haben, ist es wahrscheinlich eine gute Idee, Ihr SSL-Zertifikat zu testen und Probleme damit zu
curl -k
beheben, bevor Sie auf das Update zurückgreifen .quelle
Einfache Lösung
Das ist mein alltägliches Drehbuch:
Ausgabe:
quelle
--insecure
Verbindung über TSL, jeden Tag ...Sie müssen die gesamte Zertifikatkette zum Einrollen bereitstellen, da das Einrollen nicht mehr mit CA-Zertifikaten geliefert wird. Da die Option cacert nur eine Datei verwenden kann, müssen Sie die vollständigen Ketteninformationen in einer Datei zusammenfassen
Kopieren Sie die Zertifikatkette (z. B. von Ihrem Browser) in die DER-codierte Binärdatei x.509 (.cer). Tun Sie dies für jedes Zertifikat.
Konvertieren Sie die Zertifikate in PEM und verknüpfen Sie sie in eine Datei.
Ich habe hier einen Blog darüber geschrieben: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
quelle
Verwenden Sie
--cacert
diese Option, um eine.crt
Datei anzugeben .ca-root-nss.crt
beispielsweise.quelle
Ich hatte tatsächlich ein solches Problem und löse es durch folgende Schritte:
Das Paket mit Stammzertifizierungsstellenzertifikaten erhalten Sie hier: https://curl.haxx.se/ca/cacert.pem und speichern Sie es lokal
Suchen Sie die
php.ini
DateiLegen Sie den
curl.cainfo
Pfad der Zertifikate fest. Also wird es so etwas wie:curl.cainfo = /path/of/the/keys/cacert.pem
quelle
Hier finden Sie die CA-Zertifikate mit Anweisungen zum Herunterladen und Konvertieren von Mozilla-CA-Zertifikaten . Sobald Sie erhalten
ca-bundle.crt
oder verwendencacert.pem
Sie einfach:oder
quelle
Nachdem ich das Problem gelöst hatte, konnte ich die vorhandene Standard-CA-Systemdatei verwenden. Auf debian6 ist dies:
Als Wurzel kann dies wie folgt gemacht werden:
Starten Sie dann den Webserver neu.
quelle
Sie könnten dies verwenden
curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);
quelle
Für mich wollte ich nur eine Website testen, die eine automatische http-> https-Weiterleitung hatte. Ich glaube, ich hatte bereits einige Zertifikate installiert, daher funktioniert dies allein für mich unter Ubuntu 16.04
curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
curl --proto-default https <target>
quelle
Mit modernen Versionen von curl können Sie einfach die IP-Adresse überschreiben, mit der Sie eine Verbindung herstellen möchten, indem Sie --resolve oder --connect-to verwenden (curl neuer als Version 7.49). Dies funktioniert auch mit SSL / SNI. Alle Details finden Sie in der Manpage.
So überschreiben Sie beispielsweise DNS und stellen mit ssl unter Verwendung einer bestimmten IP-Adresse eine Verbindung zu www.example.com her: (Dadurch wird auch IPv6 überschrieben.)
Ein weiteres Beispiel, um eine Verbindung zu einem bestimmten Backend-Server mit dem Namen backend1 auf Port 8080 herzustellen
Denken Sie daran, den Host-Header hinzuzufügen, wenn der Server dies benötigt, um richtig zu antworten:
quelle