it-swarm.com.de

curl: (60) SSL-Zertifikat: Zertifikat des lokalen Ausstellers kann nicht abgerufen werden

[email protected]:/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.
150
user3812540

In Bezug auf 'Problem mit SSL-Zertifikat: Fehler beim Abrufen eines lokalen Aussteller-Zertifikats'. Dies gilt offensichtlich für das System, das die CURL-Anforderung sendet (und nicht für den Server, der die Anforderung empfängt).

1) Laden Sie das neueste 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 wie unten vorgeschlagen einige Dateien hinzufügen. Https://ss88.uk/blog/fast-cgi-and- user-ini-files-the-new-htaccess / )

162
Dahomz

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

Es gibt zwei Möglichkeiten, um dies zu erreichen:

  1. Verwenden Sie cURL mit der -k-Option, mit der curl unsichere Verbindungen herstellen kann, dh cURL überprüft das Zertifikat nicht.

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

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

83
Yuvika

Ich habe dieses Problem durch Hinzufügen eines Zeilencodes in cURL-Skript gelöst:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

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

58
Vijay Bhandari

Hatte dieses Problem nach der Installation von Git Extensions v3.48. Versucht, mysysgit erneut zu installieren, aber dasselbe Problem. Am Ende musste Git SSL die Überprüfung deaktivieren (bitte Sicherheitsaspekte beachten!) 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
18
Riga

In meinem Fall stellte sich heraus, dass es sich bei der Installation meines Zertifikats für den Dienst, den ich mit cURL verwenden wollte, als ein Problem erwies. Ich konnte die Zwischen- und Stammzertifikate nicht in meinem Domänenzertifikat bündeln/verketten . Zunächst war es 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 Stammzertifikate wiederholt.

12
Daniel Watrous

Wir sind kürzlich auf diesen Fehler gestoßen. Es stellte sich heraus, dass das Root-Zertifikat nicht ordnungsgemäß im CA Store-Verzeichnis 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: Es konnte kein lokales Ausstellerzertifikat abgerufen werden.  

Nach der Verwendung von strace curl ... wurde festgestellt, dass curl nach der Root-Zertifizierungsdatei mit dem Namen 60ff2731.0 suchte, die auf einer Namenskonventierung von openssl-Hash basiert. Also habe ich diesen Befehl gefunden, um das Root-Zertifikat effektiv zu importieren: 

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

das erzeugt einen Softlink 

60ff2731.0 -> rootcert.pem

curl, unter den Deckblättern lesen Sie das server.pem cert, bestimmen den Namen der Root-Cert-Datei (rootcert.pem), konvertieren sie in ihren Hash-Namen, führen dann eine Betriebssystemdatei-Suche durch, konnten sie aber nicht finden. 

Der Imbiss ist also: Verwenden Sie strace, wenn curl ausgeführt wird, wenn der curl-Fehler unklar ist (war eine enorme Hilfe), und installieren Sie dann das Root-Zertifikat ordnungsgemäß unter Verwendung der Namenskonvention openssl.

10
gp-coder

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:21, um das Problem zu beheben.

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

  1. habe den Server repariert
  2. vertrauen Sie diesem Zertifikat und fügen Sie es Ihrem CA-Zertifikatspeicher hinzu (nicht die beste Idee)
  3. das Vertrauen deaktivieren, z. curl -k (sehr schlechte Idee)

Wenn der Server mehr als eines zurückgegeben hat, jedoch kein selbst signiertes (Root-) Zertifikat enthält:

  1. installieren Sie das CA (Root) -Zertifikat für diese Kette in Ihrem CA-Store, z. Google der Herausgeber. (ONLY, wenn Sie dieser Zertifizierungsstelle vertrauen)
  2. der Server muss so eingerichtet sein, dass er die Zertifizierungsstelle als Teil der Kette sendet
  3. vertrauen Sie auf ein Zertifikat in der Kette
  4. das Vertrauen deaktivieren

Wenn der Server ein Zertifikat der Stammzertifizierungsstelle zurückgegeben hat, befindet es sich nicht in Ihrem CA-Informationsspeicher. Folgende Optionen stehen zur Verfügung:

  1. Fügen Sie es hinzu
  2. das Vertrauen deaktivieren

Ich habe abgelaufene/widerrufene Zertifikate ignoriert, da es keine Meldungen gab. Sie können die Zertifikate jedoch mit openssl x509 -text prüfen.

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

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

5
Jason Pyeron

Für mich half die einfache Installation von Zertifikaten:

Sudo apt-get install ca-certificates
5
Maxim Krušina

Unter Windows - wenn Sie von cmd laufen

> curl -X GET "https://some.place"

Laden Sie cacert.pem von https://curl.haxx.se/docs/caextract.html herunter.

Umgebungsvariable setzen:

CURL_CA_BUNDLE = C:\Program Files\curl-7.57.0\src\cacert.pem

und Umgebung neu laden

refreshenv

Versuchen Sie es erneut

Grund für das Problem: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/ Antworten/95548

1
RaSor

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|

Ich habe versehentlich die Ursache gefunden, dank dieser Antwort .


Alles ist gut, wenn ich auf meine Site von WAN zugegriffen habe.

Wenn jedoch auf die Site von innerhalb des LAN aus zugegriffen wurde (z. B. als Wordpress trotz Verwendung von WAN IP 49.x.x.x) eine curl-Anforderung an seinen eigenen Server stellte, wurde die pfSense-Anmeldeseite angezeigt.

Ich habe das Zertifikat als pfSense webConfigurator Self-Signed Certificate identifiziert. Kein Wunder, dass curl einen Fehler auslöste.

Ursache: Was passiert ist, war, dass curl die WAN IP-Adresse der Site 49.x.x.x verwendete. Im Kontext des Webservers war jedoch die WAN IP die Firewall.

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

Lösung: Verweisen Sie auf dem Server, auf dem die Site gehostet wird, ihren eigenen Domänennamen auf 127.0.0.1

Durch die Anwendung der Lösung wurde die Anforderung von curl ordnungsgemäß vom Webserver verarbeitet und nicht an die Firewall weitergeleitet, die mit dem Senden der Anmeldeseite antwortete.

1
Gene

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

Ansonsten handelt es sich um anständige Anweisungen zum Aktualisieren Ihres CA-Zertifikats, das Sie versuchen könnten.

1
Steve

Gemäß cURL docs können Sie das Zertifikat auch an den Befehl curl übergeben: 

Rufen Sie ein CA-Zertifikat ab, mit dem der Remote-Server überprüft werden kann, und verwenden Sie die geeignete Option, um auf dieses CA-Zertifikat zu verweisen, wenn verbinden. Für libcurl-Hacker: curl_easy_setopt (curl, CURLOPT_CAPATH, capath);

Mit dem Befehlszeilentool curl: --cacert [file]

Zum Beispiel: 

curl --cacert mycertificate.cer -v https://www.google.com
0

Bisher habe ich gesehen, dass dieses Problem in Unternehmensnetzwerken aus zwei Gründen vorkommt. Einer oder beide Gründe können in Ihrem Fall auftreten:

  1. Aufgrund der Art und Weise, wie Netzwerk-Proxies arbeiten, verfügen sie über eigene SSL-Zertifikate, wodurch die von curl erkannten Zertifikate geändert werden. Bei vielen oder den meisten Unternehmensnetzwerken müssen Sie diese Proxys verwenden.
  2. Einige Antivirus-Programme , die auf Client-PCs ausgeführt werden, verhalten sich ähnlich wie ein HTTPS-Proxy, sodass sie Ihren Netzwerkverkehr überprüfen können. Ihr Antivirenprogramm verfügt möglicherweise über eine Option zum Deaktivieren dieser Funktion (vorausgesetzt, Ihre Administratoren lassen dies zu).

Als Randbemerkung von Nummer 2 können Sie sich möglicherweise unwohl fühlen, wenn Ihr vermeintlich sicherer TLS-Verkehr gescannt wird. Das ist die Unternehmenswelt für Sie.

0
rdguam

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)
0
Ravi Prakash