it-swarm.com.de

OpenSSL Verify-Rückgabecode: 20 (Zertifikat des lokalen Ausstellers kann nicht abgerufen werden)

Ich verwende Windows Vista und versuche, eine Verbindung über https herzustellen, um eine Datei in einem mehrteiligen Formular hochzuladen, aber ich habe Probleme mit dem lokalen Ausstellerzertifikat. Ich versuche nur herauszufinden, warum das jetzt nicht funktioniert. Später gehe ich zurück zu meinem CURL-Code. Ich führe den Befehl aus:

openssl s_client -connect connect_to_site.com:443

Es gibt mir ein digitales Zertifikat von VeriSign, Inc., wirft aber auch einen Fehler aus:

Verify return code: 20 (unable to get local issuer certificate)

Was ist das lokale Ausstellerzertifikat? Ist das ein Zertifikat von meinem eigenen Computer? Gibt es da einen Weg? Ich habe versucht, die -CAfile-Datei mozilla.pem zu verwenden, gibt mir aber immer noch den gleichen Fehler.

51
bryan sammon

Ich hatte das gleiche Problem und löste es, indem ich den Pfad zu einem Verzeichnis weitergab, in dem CA-Schlüssel gespeichert sind. Auf Ubuntu war es:

openssl s_client -CApath /etc/ssl/certs/ -connect address.com:443
86
Jan Wrobel

Dieser Fehler tritt auch auf, wenn Sie ein selbstsigniertes Zertifikat mit einer keyUsage verwenden, dem der Wert keyCertSign fehlt.

5
Conrado

Lösung: Sie müssen den Parameter -CAfile your-ca-file.pem explizit hinzufügen.

Hinweis: Ich habe auch versucht, Param -CApath in anderen Antworten erwähnt, ist aber bei mir nicht funktionsfähig.

Erläuterung: Fehler unable to get local issuer certificate bedeutet, dass die openssl Ihr Root-CA-Zertifikat nicht kennt.


Hinweis: Wenn Sie Webserver mit mehr Domänen haben, vergessen Sie nicht, auch den Parameter -servername your.domain.net hinzuzufügen. Dieser Parameter wird "TLS-Erweiterungsservername in ClientHello festlegen". Ohne diesen Parameter enthält die Antwort immer das Standard-SSL-Zertifikat (kein Zertifikat, das Ihrer Domäne entspricht).

5
Martin

Ich hatte das gleiche Problem unter OSX OpenSSL 1.0.1i von Macports und musste auch CApath als Workaround angeben (und wie im Ubuntu-Fehlerbericht erwähnt, führt ein invalid CApath dazu, dass openssl in das Standardverzeichnis schaut) . Interessanterweise funktionierte die Verbindung zum selben Server mit den Opensl-Funktionen von PHP (wie in PHPMailer 5 verwendet) einwandfrei.

3
Brophy

legen Sie Ihr CA- und Root-Zertifikat in/usr/share/ca-certificate oder /usr/local/share/ca-certificate.Then 

dpkg-ca-Zertifikate neu konfigurieren

oder installieren Sie das ca-certificate-Paket mit apt-get sogar neu.

Danach wird Ihr Zertifikat in der Datenbank des Systems gesammelt: /Etc/ssl/certs/ca-certificate.crt

Dann sollte alles gut gehen.

2
user1462586

Ist Ihr Server für die Client-Authentifizierung konfiguriert? In diesem Fall müssen Sie das Clientzertifikat während der Verbindung mit dem Server übergeben.

2
Sivachandran

Ich stand vor demselben Problem, Das Problem wurde behoben, nachdem der Wert des Emittenten im Zertifikat enthalten war, da er als Emittentenzertifikat gilt.

bitte aktivieren Sie "Emittententitelwert im Zertifikat (cert.pem) == Betreff des Emittenten (CA.pem)".

openssl verify -CAfile CA.pem cert.pem 
cert.pem: OK

1

Mit Client-Authentifizierung:

openssl s_client -cert ./client-cert.pem -key ./client-key.key -CApath /etc/ssl/certs/ -connect foo.example.com:443
1
toppur

Erstellen Sie die Zertifikatskettendatei mit dem Zwischen- und Stammverzeichnis.

cat intermediate/certs/intermediate.cert.pem certs/ca.cert.pem > intermediate/certs/ca-chain.cert.pem

chmod 444 intermediate/certs/ca-chain.cert.pem

Dann verifizieren

openssl verify -CAfile intermediate/certs/ca-chain.cert.pem \
  intermediate/certs/www.example.com.cert.pem

www.example.com.cert.pem: OK Stellen Sie das Zertifikat bereit

0
sanjay

diese Fehlermeldung bedeutet, dass CABundle nicht durch (-CAfile ...) OR angegeben wird. Die CABundle-Datei wird nicht durch ein selbstsigniertes Stammzertifikat geschlossen.

Mach dir keine Sorgen. Die Verbindung zum Server funktioniert auch dann, wenn Sie diese Nachricht von openssl s_client erhalten ... (vorausgesetzt, Sie machen keinen anderen Fehler)

0
Pal Sonkoly