it-swarm.com.de

https-Verbindung mit CURL von der Befehlszeile aus

Ich bin neu bei Curl und Cacerts und stehe vor einem Problem, während ich mich mit einem Server verbinde. Im Grunde muss ich die Konnektivität über https von einem Rechner auf einen anderen Rechner testen. Ich habe eine URL, zu der ich eine Verbindung herstellen muss von Maschine A (eine Linux-Maschine) Ich habe dies mit dem Befehl Prompt ausprobiert

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 durchging, habe ich Folgendes getan:

openssl s_client -connect <domain name or Ip address>:443

und erhielt einige Antwort, einschließlich des Serverzertifikats (in -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----).

Was soll ich als Nächstes tun? Ich denke, ich muss einfach den Text in BEGIN CERTIFICATE & END CERTIFICATE kopieren und in einer Datei speichern . Aber Welche Art von Datei sollte es sein? .pem, .crt? .. Was muss ich danach tun?

Ich habe dies versucht - kopierte den Text in BEGIN CERTIFICATE & END CERTIFICATE und speicherte ihn in einer .crt-Datei - benannte ihn als my-ca.crt (probierte dasselbe, indem er ihn als my-ca.pem-Datei benannte) Und tat dann Folgendes:

cmd>curl --cacert my-ca.crt https://[my domain or IP address]

Habe aber den gleichen Fehler bekommen.

88
user1270392

Ich hatte das gleiche Problem - ich holte eine Seite von meiner eigenen Website ab, die über HTTPS bereitgestellt wurde, aber curl gab die gleiche "SSL-Zertifikat-Problem" -Meldung aus. Ich habe es umgangen, indem ich dem Aufruf ein -k-Flag hinzugefügt habe, um unsichere Verbindungen zuzulassen.

curl -k https://whatever.com/script.php

Edit: Ich habe die Wurzel des Problems entdeckt. Ich habe ein SSL-Zertifikat (von StartSSL, aber ich glaube nicht, dass dies wichtig ist) verwendet und das Zwischenzertifikat nicht ordnungsgemäß eingerichtet. Wenn Sie das gleiche Problem wie Benutzer1270392 haben, ist es wahrscheinlich eine gute Idee, Ihr SSL-Zertifikat testen zu testen und alle Probleme damit zu beheben, bevor Sie auf den Fix curl -k zurückgreifen.

110
Dave Child

Einfache Lösung

Das ist mein Alltagsskript:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

Ausgabe:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to Host www.google.com left intact
26
Antonio Feitosa

Sie müssen die gesamte Zertifikatskette für curl bereitstellen, da curl keine CA-Zertifikate mehr enthält. Da die Option cacert nur eine Datei verwenden kann, müssen Sie die gesamten Ketteninformationen in einer Datei zusammenfassen

Kopieren Sie die Zertifikatskette (z. B. von Ihrem Browser) in DER-codierte Binärdatei x.509 (.cer). Tun Sie dies für jedes Zertifikat. 

Konvertieren Sie die Zertifikate in PEM und bündeln Sie sie in einer Datei. 

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text

cat *.pem > certRepo

curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"

Ich habe hier einen Blog geschrieben: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html

21
Somaiah Kumbera

verwenden Sie --cacert, um eine .crt-Datei anzugeben. ca-root-nss.crt zum Beispiel. 

14
ano

Ich hatte tatsächlich diese Art von Problem und ich löse es durch diese Schritte:

  1. Laden Sie das Bundle der CA-Stammzertifikate hier herunter: https://curl.haxx.se/ca/cacert.pem und speichern Sie es auf local 

  2. Suchen Sie die php.ini-Datei

  3. Legen Sie den curl.cainfo als Pfad für die Zertifikate fest. Also wird es so etwas wie: 

curl.cainfo = /path/of/the/keys/cacert.pem

5
geckob

nachdem ich das Problem beseitigt hatte Ich konnte die vorhandene Standard-CA-Datei des Systems verwenden. Unter debian6 ist dies:

/etc/ssl/certs/ca-certificates.crt

als root kann dies wie folgt gemacht werden:

echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini

starten Sie anschließend den Webserver erneut.

1
Jasen

du könntest das gebrauchen

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);

1
Ahmed Ali

Hier finden Sie die CA-Zertifikate mit Anweisungen zum Herunterladen und Konvertieren von Mozilla CA-Zertifikaten ..__ Wenn Sie ca-bundle.crt oder cacert.pem erhalten, verwenden Sie einfach:

curl.exe --cacert cacert.pem https://www.google.com

oder 

curl.exe --cacert ca-bundle.crt https://www.google.com
1
lmiguelmh

Für mich wollte ich nur eine Website testen, die eine automatische http-> https-Weiterleitung hatte. Ich glaube, ich hatte bereits einige Zertifikate installiert, so dass dies allein für mich auf Ubuntu 16.04 läuft und 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 läuft.

curl --proto-default https <target>

0
SamCyanide