Curl: (60) Problem mit dem SSL-Zertifikat: Lokales Ausstellerzertifikat kann nicht abgerufen werden

258
root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
user3812540
quelle
1
Mögliches Duplikat der Ausgabe
JWW
Ich hatte ein ähnliches Problem. Dies funktionierte für mich stackoverflow.com/a/29649024
Sagruob
In meinem Fall hat superuser.com/a/719047/137881 geholfen.
Abdull
//, In meinem Fall habe ich diesen Fehler erhalten, weil ich Curl-Anforderungen an den HashiCorp Vault-Server gesendet habe, bis ich ein X509-Zertifikat mit der Endentität / Intermediates / root nur in umgekehrter Reihenfolge installiert habe, von denen jede Base64-codiert war.
Nathan Basanese
//, Welche Nachforschungen haben Sie angestellt, bevor Sie den Fehler hierher kopiert haben?
Nathan Basanese

Antworten:

231

Bezogen auf 'SSL-Zertifikatsproblem: Fehler des lokalen Ausstellerzertifikats nicht möglich'. Es ist wichtig zu beachten, dass dies für das System gilt, das die CURL-Anforderung sendet, und NICHT für den Server, der die Anforderung empfängt.

  1. Laden Sie die neueste Datei cacert.pem von https://curl.haxx.se/ca/cacert.pem herunter

  2. Fügen Sie die folgende Zeile zu php.ini hinzu: (Wenn dies Shared Hosting ist und Sie keinen Zugriff auf php.ini haben, können Sie dies zu .user.ini in public_html hinzufügen.)

    curl.cainfo="/path/to/downloaded/cacert.pem"

    Stellen Sie sicher, dass Sie den Pfad in doppelte Anführungszeichen setzen !!!

  3. Standardmäßig analysiert der FastCGI-Prozess alle 300 Sekunden neue Dateien (bei Bedarf können Sie die Häufigkeit ändern, indem Sie einige Dateien hinzufügen, wie hier vorgeschlagen: https://ss88.uk/blog/fast-cgi-and-user-ini- files-the-new-htaccess / ).

Dahomz
quelle
1
Der erste bezieht sich auf die Zertifizierung von Vorgängen, die mit der OpenSSL-Bibliothek ausgeführt werden. die zweite auf Anfragen mit cURL
Mike
4
Eigentlich kämpfte ich eine Stunde lang, da ich keinen Pfad in Anführungszeichen schrieb. Also bitte notieren Sie sich hiercurl.cainfo="/path/to/downloaded/cacert.pem" // Do not forget to write between quotes
Himanshu Upadhyay
12
Ich sehe keinen Hinweis in der Frage zu PHP. Warum die Referenzen in der Antwort? Wenn die Frage bearbeitet wurde, kann die Antwort dann bearbeitet werden, um die jetzt verwendete Befehlszeile wiederzugeben?
Adam
5
@Adam Während in der Frage PHP nicht erwähnt wird, wird dies in Google als das Suchergebnis Nr. 1 für die von PHP generierte spezifische Fehlermeldung angezeigt. Vielleicht beantwortet es die Frage von OP nicht speziell, aber es scheint immer noch nützlich für die Community zu sein.
Rinogo
1
Diese Antwort war für mich irreführend, da es sich um eine Lösung im Zusammenhang mit PHP handelt
Wasif Khan
141

Es schlägt fehl, da cURL das vom Server bereitgestellte Zertifikat nicht überprüfen kann.

Es gibt zwei Möglichkeiten, um dies zum Laufen zu bringen:

  1. Verwenden Sie cURL mit der -kOption, mit der Curl unsichere Verbindungen herstellen kann. Das heißt, cURL überprüft das Zertifikat nicht.

  2. Fügen Sie die Stammzertifizierungsstelle (die Zertifizierungsstelle, die das Serverzertifikat signiert) hinzu /etc/ssl/certs/ca-certificates.crt

Sie sollten Option 2 verwenden, da diese Option sicherstellt, dass Sie eine Verbindung zum sicheren FTP-Server herstellen.

Yuvika
quelle
1
Ich habe meine rootCA.pem-Datei hinzugefügt in: - root @ sclrdev: / home / certs / FreshCerts # ll /etc/ssl/certs/rootCA.pem -rwxrwxrwx 1 root root 1302 8. Juli 00:09 / etc / ssl / certs / rootCA.pem * Auch ich habe die Datei ServerCertificate.pem mit meiner Datei rootCA.pem überprüft: - root @ sclrdev: / home / certs / FreshCerts # openssl verify -CAfile rootCA.pem ../ServerCertificate.pem ServerCertificate.pem: OK Und auch den Inhalt von rootCA.pem in ca-certificates.crt. root @ sclrdev: / home / sclr / subhendu / certs / FreshCerts # ll /etc/ssl/certs/ca-certificates.crt -rw-r - r-- 1 root root 247945 8. Juli 00:10 / etc / ssl /certs/ca-certificates.crt
user3812540
Ich kann nicht herausfinden, wo ich falsch liege. In WireShark-Traces wird die folgende Fehlermeldung angezeigt: - Client Hallo Server Hallo, Zertifikat, Server Hallo Fertig Warnung (Stufe: Schwerwiegend, Beschreibung: Unbekannte Zertifizierungsstelle (48)) Können Sie mich bitte anleiten und mir dabei helfen?
user3812540
OpenSL funktioniert so, dass versucht wird, die Zertifikatkette während der Überprüfung zu vervollständigen. Ist Ihr Serverzertifikat von einer Zwischenzertifizierungsstelle und nicht von einer Stammzertifizierungsstelle signiert? zum Beispiel
Yuvika
Mein Zertifikat ist nur von der Stammzertifizierungsstelle signiert.
user3812540
1
Ich habe eine Fehlermeldung erhalten: - root @ sclrdev: ~ # openssl s_client -connect <server_ip>: 21 -showcerts CONNECTED (00000003) 3074050248: Fehler: 140770FC: SSL-Routinen: SSL23_GET_SERVER_HELLO: unbekanntes Protokoll: s23_clnt.c: 766: Kein Peer-Zertifikat verfügbar --- Keine Client-Zertifikat-CA-Namen gesendet --- SSL-Handshake hat 7 Bytes gelesen und 225 Bytes geschrieben --- Neu, (KEINE), Verschlüsselung ist (KEINE) Sichere Neuverhandlung wird NICHT unterstützt Komprimierung: KEINE Erweiterung: KEINE --- Ich bin nicht sicher, was das genau bedeutet?
user3812540
69

Ich habe dieses Problem gelöst, indem ich einen Zeilencode in das cURL-Skript eingefügt habe:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Warnung : Dies macht die Anfrage absolut unsicher (siehe Antwort von @YSU)!

Vijay Bhandari
quelle
42
Dies kann helfen, das Problem zu umgehen. Aber die Idee von https und dem Zertifizierungssystem fehlt völlig.
Stephan Richter
1
Funktioniert! Schöner schneller und schmutziger Bypass, wenn Sie sich nicht für das Zertifikat interessieren
Gilly
2
Dies macht es völlig unsicher.
Moox
1
Ich hatte dieses Problem auf meinem lokalen Server, obwohl derselbe Code auf dem Staging-Server einwandfrei funktionierte. Gut für mich, da es vor Ort war. Danke
Sabin
1
Fügen Sie diese Prüfung hinzu, um sicherzustellen, dass Sie sie nur mit dem lokalen Server verwendenif( stristr("127.0.0.1",$_SERVER["SERVER_NAME"] ) || stristr("localhost",$_SERVER["SERVER_NAME"] )) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Hussain
20

In meinem Fall stellte sich heraus, dass es ein Problem mit der Installation meines Zertifikats auf dem Dienst war, den ich mit cURL verwenden wollte. Ich konnte die Zwischen- und Stammzertifikate nicht in meinem Domänenzertifikat bündeln / verketten . Es war zunächst nicht offensichtlich, dass dies das Problem war, da Chrome es ausgearbeitet und das Zertifikat akzeptiert hat, obwohl die Zwischen- und Stammzertifikate weggelassen wurden.

Nach dem Bündeln des Zertifikats funktionierte alles wie erwartet. Ich habe so gebündelt

$ cat intermediate.crt >> domain.crt

Und für alle Zwischen- und das Stammzertifikat wiederholt.

Daniel Watrous
quelle
2
Ich hatte ein ähnliches Problem, außer dass ich meine Apache SSLCertificateChainFile nicht auf das richtige Zertifikat eingestellt hatte.
Wayne Piekarski
1
Beachten Sie, dass, wenn Sie dies tun und die von Ihnen hinzugefügten CRTs keine nachgestellte neue Zeile haben, Sie Zeilen wie -----END CERTIFICATE----------BEGIN CERTIFICATE-----in Ihrem Bundle haben und den obskuren Fehler erhalten:curl: (77) error setting certificate verify locations
Marty Neal
2
Ich verwende letsencrypt-Zertifikate, habe aber nur das Zertifikat und den privaten Schlüssel auf dem Server bereitgestellt. Chrome und Curl auf meinem Computer haben sich nicht beschwert, aber eine von mir erstellte NodeJS-App hat das Zertifikat nicht akzeptiert. Durch die Bereitstellung der Vollkette auf dem Server wurde das Problem behoben! Vielen Dank für den richtigen Weg!
Paulo Santos
In meinem Fall (Zertifikat von comodo) haben sie die Zwischenzertifikate als my-domain.ca-Bundle gesendet. Ich musste das an my-domain.crt anhängen. Vielen Dank!
Jon Hulka
18

Für mich hat die einfache Installation von Zertifikaten geholfen:

sudo apt-get install ca-certificates
Maxim Krušina
quelle
2
In einigen kleinen Docker-Containern ist dies möglicherweise nicht installiert, und es macht keinen Sinn, andere Probleme zu beheben, wenn nicht das gesamte Paket vorhanden ist.
Muni764
16

Hatte dieses Problem nach der Installation von Git Extensions v3.48. Versucht, mysysgit erneut zu installieren, aber das gleiche Problem. Am Ende musste die Git SSL-Überprüfung deaktiviert werden (bitte Sicherheitsaspekte berücksichtigen!) Mit:

git config --global http.sslVerify false

Wenn Sie jedoch ein Domänenzertifikat haben, fügen Sie es besser zu (Win7) hinzu.

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
Riga
quelle
23
Funktioniert, hat aber das Gefühl, das Symptom zu verbergen und die Krankheit nicht zu heilen.
MonoThreaded
4
Das Deaktivieren der SSL-Überprüfung ist sehr gefährlich
Jonasl
1
Sie können darauf verzichten --global, SSL nur für das Repository zu deaktivieren, in dem Sie Probleme haben. Unter groups.google.com/forum/#!topic/git-for-windows/mlqn5J4OLlw finden Sie eine Diskussion zu den aktuell erforderlichen CRT-Dateien.
Koppor
13

Wir sind kürzlich auf diesen Fehler gestoßen. Es stellte sich heraus, dass das Stammzertifikat nicht ordnungsgemäß im CA-Speicherverzeichnis installiert wurde. Ich habe einen Curl-Befehl verwendet, bei dem ich das CA-Verzeichnis direkt angegeben habe. curl --cacert /etc/test/server.pem --capath /etc/test ...Dieser Befehl schlug jedes Mal mit curl fehl: (60) Problem mit dem SSL-Zertifikat: Das lokale Ausstellerzertifikat konnte nicht abgerufen werden.

Nach der Verwendung strace curl ...wurde festgestellt, dass curl nach der Stammzertifizierungsdatei mit dem Namen 60ff2731.0 suchte, die auf einer OpenSL-Hash-Namenskonvetion basiert. Daher habe ich diesen Befehl gefunden, um das Stammzertifikat effektiv zu importieren:

ln -s rootcert.pem `openssl x509 -hash -noout -in rootcert.pem`.0

Dadurch wird ein Softlink erstellt

60ff2731.0 -> rootcert.pem

curl las unter dem Deckmantel das server.pem-Zertifikat, bestimmte den Namen der Stammzertifizierungsdatei (rootcert.pem), konvertierte sie in ihren Hash-Namen und führte dann eine Suche nach Betriebssystemdateien durch, konnte sie jedoch nicht finden.

Zum Mitnehmen sollten Sie beim Ausführen von Curl Strace verwenden, wenn der Curl-Fehler unklar ist (was eine enorme Hilfe war), und dann sicherstellen, dass das Stammzertifikat mithilfe der OpenSL-Namenskonvention ordnungsgemäß installiert wird.

GP-Codierer
quelle
2
Puh, es hat geholfen. Um ein bisschen näher darauf einzugehen, was mir geholfen hat: a) Strace Curl ausführen ... b) nach fehlgeschlagenem stat () mit etwas-hex suchen.0 c) nach etwas-hex gegoogelt, entsprechendes Zertifikat gefunden d) gefundenes Zertifikat in / usr / setzen local / share / ca-certificates / (mit der Erweiterung * .crt, da * .pem nicht funktioniert hat) e) Führen Sie update-ca-certificates aus. Dann Bingo! - Notwendiger Symlink wurde automatisch in / usr / lib / ssl / certs / erstellt
No-Bugs Hare
11

Es ist höchstwahrscheinlich ein fehlendes Zertifikat vom Server.

Root-> Intermediate-> Server

Ein Server sollte mindestens den Server & Intermediate senden.

Verwenden Sie openssl s_client -showcerts -starttls ftp -crlf -connect abc:21diese Option, um das Problem zu beheben.

Wenn nur ein Zertifikat zurückgegeben wird (entweder selbst signiert oder ausgestellt), müssen Sie Folgendes auswählen:

  1. Habe den Server repariert
  2. Vertrauen Sie diesem Zertifikat und fügen Sie es Ihrem CA Cert Store hinzu (nicht die beste Idee).
  3. Vertrauen deaktivieren, zB curl -k(sehr schlechte Idee)

Wenn der Server zurückgegeben wurde, mehrere, jedoch ohne selbstsigniertes (Root-) Zertifikat:

  1. Installieren Sie das CA-Zertifikat (Root-Zertifikat) in Ihrem CA-Store für diese Kette, z. B. googeln Sie den Aussteller. ( NUR wenn Sie dieser Zertifizierungsstelle vertrauen)
  2. Lassen Sie den Server reparieren, um die Zertifizierungsstelle als Teil der Kette zu senden
  3. Vertraue einem Zertifikat in der Kette
  4. Vertrauen deaktivieren

Wenn der Server ein Stammzertifizierungsstellenzertifikat zurückgegeben hat, befindet es sich nicht in Ihrem Zertifizierungsstellenspeicher. Folgende Optionen stehen zur Verfügung:

  1. Füge es hinzu (vertraue)
  2. Vertrauen deaktivieren

Ich habe abgelaufene / widerrufene Zertifikate ignoriert, da es keine Meldungen gab, die darauf hinweisen. Aber Sie können die Zertifikate mit untersuchenopenssl x509 -text

Wenn Sie eine Verbindung zu einem Home Edition- FTP-Server ( https://www.cerberusftp.com/support/help/installing-a-certificate/ ) herstellen, werde ich sagen, dass dieser selbst signiert ist.

Bitte posten Sie weitere Details, wie die Ausgabe von openssl.

Jason Pyeron
quelle
6

Gemäß cURL-Dokumenten können Sie das Zertifikat auch an den folgenden curlBefehl übergeben:

Holen Sie sich ein CA-Zertifikat, mit dem der Remote-Server überprüft werden kann, und verwenden Sie die richtige Option, um dieses CA-Zertifikat zur Überprüfung beim Herstellen einer Verbindung anzuzeigen. Für libcurlHacker:curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

Mit dem Curl-Befehlszeilen-Tool: --cacert [file]


Beispielsweise:

curl --cacert mycertificate.cer -v https://www.stackoverflow.com
Giorgos Myrianthous
quelle
5

Es kann ausreichend sein, nur die Liste der Zertifikate zu aktualisieren

sudo update-ca-certificates -f

update-ca-certificates ist ein Programm, das das Verzeichnis / etc / ssl / certs aktualisiert, um SSL-Zertifikate zu speichern, und ca-certificates.crt generiert, eine verkettete Liste von Zertifikaten in einer einzelnen Datei.

Michael P. Bazos
quelle
habe es getan und alles ist erledigt, nachdem es ausgeführt wurde. Aber Locken funktionieren nicht. immer noch der gleiche Fehler.
AGamePlayer
1
Ich habe befohlen, und es hat nicht geholfen, und ich konnte nicht glauben, dass ich alles oben tun muss. Und dann deine Antwort ... Danke für die '-f'-Flagge.
Alex Shtromberg
1
Dies ist auch die Lösung, zu der ich gekommen bin. +1
SS Anne
3

Versuchen Sie, curl in Ubuntu neu zu installieren und meine CA-Zertifikate zu sudo update-ca-certificates --freshaktualisieren, mit denen die Zertifikate aktualisiert wurden

Ankit Singh
quelle
2

Unter Windows hatte ich dieses Problem. Curl wurde von mysysgit installiert, daher wurde mein Problem durch Herunterladen und Installieren der neuesten Version behoben.

Andernfalls sind dies anständige Anweisungen zum Aktualisieren Ihres CA-Zertifikats, die Sie versuchen könnten.

Steve
quelle
2

Ja, Sie müssen auch ein CA-Zertifikat hinzufügen. Hinzufügen eines Code-Snippets in Node.js zur besseren Übersicht.

var fs = require(fs)
var path = require('path')
var https = require('https')
var port = process.env.PORT || 8080;
var app = express();

https.createServer({
key: fs.readFileSync(path.join(__dirname, './path to your private key/privkey.pem')),
cert: fs.readFileSync(path.join(__dirname, './path to your certificate/cert.pem')),
ca: fs.readFileSync(path.join(__dirname, './path to your CA file/chain.pem'))}, app).listen(port)
Ravi Prakash
quelle
2

Ich bin auch auf dieses Problem gestoßen. Ich habe diesen Thread gelesen und die meisten Antworten sind informativ, aber für mich zu komplex. Ich habe keine Erfahrung mit Networking-Themen, daher ist diese Antwort für Leute wie mich.

In meinem Fall trat dieser Fehler auf, weil ich die Zwischen- und Stammzertifikate nicht neben dem Zertifikat, das ich in meiner Anwendung verwendet habe, angegeben habe.

Folgendes habe ich vom Anbieter des SSL-Zertifikats erhalten:

- abc.crt
- abc.pem
- abc-bunde.crt

In der abc.crtDatei gab es nur ein Zertifikat:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----

Wenn ich es in diesem Format bereitstellen würde, würde der Browser keine Fehler anzeigen (Firefox), aber ich würde eine curl: (60) SSL certificate : unable to get local issuer certificateFehlermeldung erhalten, wenn ich die Curl-Anfrage mache.

Überprüfen Sie Ihre abc-bunde.crtDatei, um diesen Fehler zu beheben . Sie werden höchstwahrscheinlich so etwas sehen:

-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Dies sind Ihre Zwischen- und Stammzertifikate. Ein Fehler tritt auf, weil sie in dem SSL-Zertifikat fehlen, das Sie Ihrer Anwendung zur Verfügung stellen.

Kombinieren Sie den Inhalt dieser beiden Dateien in diesem Format, um den Fehler zu beheben:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Beachten Sie, dass zwischen den Zertifikaten am Ende oder am Anfang der Datei keine Leerzeichen stehen. Sobald Sie dieses kombinierte Zertifikat Ihrer Anwendung zur Verfügung gestellt haben, sollte Ihr Problem behoben sein.

Eorekan
quelle
1

Mein Fall war anders. Ich hoste eine Site hinter einer Firewall. Der Fehler wurde von pfSense verursacht.

Network layout: |Web Server 10.x.x.x| <-> |pfSense 49.x.x.x| <-> |Open Internet|

Dank dieser Antwort habe ich versehentlich die Ursache gefunden .


Alles ist gut, als ich über WAN auf meine Website zugegriffen habe .

Wenn jedoch über das LAN auf die Site zugegriffen wurde (z. B. wenn Wordpress curltrotz Verwendung der WAN-IP eine Anfrage an seinen eigenen Server stellte 49.x.x.x), wurde die pfSense-Anmeldeseite bereitgestellt .

Ich habe das Zertifikat als identifiziert pfSense webConfigurator Self-Signed Certificate. Kein Wunder, dass curlein Fehler aufgetreten ist.

Ursache: Es wurde curldie WAN-IP-Adresse der Site verwendet 49.x.x.x. Im Kontext des Webservers war die WAN-IP jedoch die Firewall.

Debug: Ich habe festgestellt, dass ich das pfSense-Zertifikat erhalten habe.

Lösung: Zeigen Sie auf dem Server, auf dem sich die Site befindet, auf 127.0.0.1

Durch Anwenden der Lösung wurde curldie Anfrage vom Webserver ordnungsgemäß verarbeitet und nicht an die Firewall weitergeleitet, die daraufhin die Anmeldeseite gesendet hat.

PNDA
quelle
0

Dies ist ein Problem mit dem SSH-Zertifikatspeicher. Sie müssen die gültige Zertifikat-PEM-Datei von der CA-Zielwebsite herunterladen und dann die Softlink-Datei erstellen, um ssl das vertrauenswürdige Zertifikat anzuweisen.

openssl x509 -hash -noout -in DigiCert_Global_Root_G3.pem

Sie erhalten dd8e9d41

Erstellen Sie einen Solf-Link mit einer Hash-Nummer und fügen Sie der Datei ein .0 (Punkt-Null) hinzu

dd8e9d41.0

Dann versuchen Sie es erneut.

Roger
quelle
0
  1. Laden Sie https://curl.haxx.se/ca/cacert.pem herunter

  2. Verschieben Sie diese Datei nach dem Download auf Ihren Wamp-Server.

    Für exp: D: \ wamp \ bin \ php \

  3. Fügen Sie dann die folgende Zeile zur Datei php.ini unten hinzu.

curl.cainfo = "D: \ wamp \ bin \ php \ cacert.pem"

  1. Starten Sie nun Ihren Wamp-Server neu.
Sandeep Kumar
quelle
0

Sie haben vom Server cert ändern , cert.pemum fullchain.pem
ich hatte das gleiche Problem Perl HTTPS Daemon:
Ich habe geändert:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/cert.pem'
zu:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/fullchain.pem'

k-messaoudi
quelle
-1

Bisher ist dieses Problem in Unternehmensnetzwerken aus zwei Gründen aufgetreten, von denen einer oder beide in Ihrem Fall auftreten können:

  1. Aufgrund der Funktionsweise von Netzwerk-Proxys verfügen sie über eigene SSL-Zertifikate, wodurch die von Curl angezeigten Zertifikate geändert werden. Viele oder die meisten Unternehmensnetzwerke zwingen Sie zur Verwendung dieser Proxys.
  2. Einige Antivirenprogramme, die auf Client-PCs ausgeführt werden, verhalten sich ähnlich wie ein HTTPS-Proxy, sodass sie Ihren Netzwerkverkehr scannen können. Ihr Antivirenprogramm verfügt möglicherweise über eine Option zum Deaktivieren dieser Funktion (vorausgesetzt, Ihre Administratoren lassen dies zu).

Nebenbei bemerkt, Nr. 2 oben kann dazu führen, dass Sie sich unwohl fühlen, wenn Ihr angeblich sicherer TLS-Verkehr gescannt wird. Das ist die Unternehmenswelt für Sie.

rdguam
quelle
-1

Hatte dieses Problem und es wurde nicht mit neuerer Version gelöst. / etc / certs hatte das Stammzertifikat, der Browser sagte, alles sei in Ordnung. Nach einigen Tests erhielt ich von ssllabs.com die Warnung, dass meine Kette nicht vollständig war (tatsächlich war es die Kette für das alte Zertifikat und nicht das neue). Nach der Korrektur der Zertifizierungskette war alles in Ordnung, auch mit Locken.

Frank
quelle
-1

Ich hatte dieses Problem mit Digicert aller Zertifizierungsstellen. Ich habe eine digicertca.pem-Datei erstellt, die sowohl als Zwischen- als auch als Root-Datei in eine Datei eingefügt wurde.

curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem

curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
*  subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
*  SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...

Eorekan hatte die Antwort, brachte aber nur mich und einen anderen dazu, seine Antwort zu stimmen.

Kirt Carson
quelle
-2

Speziell für WindowsBenutzer, die eine curl-7.57.0-win64-mingwähnliche Version verwenden.

Dies ist etwas spät und die vorhandenen Antworten sind korrekt. Aber ich musste immer noch ein bisschen kämpfen, um es auf meinem Windows-Computer zum Laufen zu bringen, obwohl der Prozess eigentlich ziemlich einfach ist. Teilen Sie also den schrittweisen Prozess.

Dieser Fehler bedeutet im Grunde, dass Curl das Zertifikat des Ziel-URI nicht überprüfen kann. Wenn Sie dem Aussteller des Zertifikats (CA) vertrauen, können Sie dies zur Liste der vertrauenswürdigen Zertifikate hinzufügen.

Durchsuchen Sie dazu den URI (z. B. in Chrome) und befolgen Sie die Schritte

  1. Klicken Sie mit der rechten Maustaste auf das Symbol für das sichere Vorhängeschloss
  2. Klicken Sie auf Zertifikat. Daraufhin wird ein Fenster mit den Zertifikatdetails geöffnet
  3. Gehen Sie zur Registerkarte "Zertifizierungspfad"
  4. Klicken Sie auf das ROOT-Zertifikat
  5. Klicken Sie auf Zertifikat anzeigen. Daraufhin wird ein weiteres Zertifikatfenster geöffnet
  6. Gehen Sie zur Registerkarte Details
  7. Klicken Sie auf In Datei kopieren, um den Exportassistenten zu öffnen
  8. Weiter klicken
  9. Wählen Sie 'Base-64-codiertes X.509 (.CER)'.
  10. Weiter klicken
  11. Geben Sie einen Anzeigenamen ein, z. B. 'MyDomainX.cer' (zum gewünschten Verzeichnis navigieren)
  12. Weiter klicken
  13. Klicken Sie auf Fertig stellen, um die Zertifikatdatei zu speichern
  14. Öffnen Sie nun diese .cerDatei und kopieren Sie den Inhalt (einschließlich ----- BEGIN CERTIFICATE ----- und ----- END CERTIFICATE -----).
  15. Gehen Sie nun in das Verzeichnis, in dem curl.exezC:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. Öffnen Sie die curl-ca-bundle.crtDatei mit einem Texteditor
  17. Hängen Sie den kopierten Zertifikatstext an das Ende der Datei an. sparen

Jetzt sollte Ihr Befehl in Curl gut ausgeführt werden.

Arghya C.
quelle
3
Einige Kommentare zum Grund für die Ablehnung wären
willkommen
Ich finde keine Datei mit dem Namen "curl-ca-bundle.crt" in "C: \ xampp \ apache \ bin" (Windows). Ich schätze, die Abstimmungen waren darauf zurückzuführen. Ich habe meine "curl.exe" im oben erwähnten Ordner "bin"
kathikeyan A
-4

Dies kann Ihnen beim Verzehr helfen:

$client = new Client(env('API_HOST'));
$client->setSslVerification(false);

getestet an Guzzle / Guzzle 3. *

fico7489
quelle
-5

Einfache Lösung: IN ~/.sdkman/etc/config, ändernsdkman_insecure_ssl=true

Schritte:
Nano- ~/.sdkman/etc/config
Änderung sdkman_insecure_ssl=falsezum sdkman_insecure_ssl=true
Speichern und Beenden

biniam
quelle