Ich verwende Windows Vista und versuche, über https eine Verbindung herzustellen, um eine Datei in einer mehrteiligen Form hochzuladen, habe jedoch Probleme mit dem lokalen Ausstellerzertifikat. Ich versuche nur herauszufinden, warum dies jetzt nicht funktioniert, und später zu meinem cURL-Code zurückzukehren, nachdem dies ausgearbeitet wurde. Ich führe den Befehl aus:
openssl s_client -connect connect_to_site.com:443
Es gibt mir ein digitales Zertifikat von VeriSign, Inc., aber es gibt 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 einen Weg, dies zu umgehen? Ich habe versucht, die Datei -CAfile mozilla.pem zu verwenden, erhalte aber immer noch den gleichen Fehler.
connect_to_site.com
ist (oder kann) eine echte Website. Sie sollten verwenden,example.com
da IANA es für diesen Zweck reserviert.connect_to_site.com
ist ein Domainname, kein Hostname. Ich weiß nicht, ob IDNA Unterstriche in Hostnamen zulässt. Siehe auch Können Subdomains (Domainnamen) einen Unterstrich "_" enthalten? .Antworten:
Ich hatte das gleiche Problem und löste es, indem ich den Pfad an ein Verzeichnis übergab, in dem CA-Schlüssel gespeichert sind. Unter Ubuntu war es:
quelle
/dev/null
, damit Ihr Kunde an allen üblichen Stellen selbst nach den Zertifikaten sucht.ca-certificates
.Dieser Fehler tritt auch auf, wenn Sie ein selbstsigniertes Zertifikat verwenden, bei dem
keyUsage
der Wert fehltkeyCertSign
.quelle
Lösung: Sie müssen den Parameter explizit hinzufügen
-CAfile your-ca-file.pem
.Hinweis: Ich habe auch den
-CApath
in anderen Antworten erwähnten Parameter ausprobiert , funktioniert aber bei mir nicht.Erläuterung: Fehler
unable to get local issuer certificate
bedeutet, dass deropenssl
Ihr Stammzertifizierungsstellenzertifikat nicht kennt.Hinweis: Wenn Sie einen Webserver mit mehr Domänen haben , vergessen Sie nicht, auch
-servername your.domain.net
Parameter 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 mit Ihrer Domain übereinstimmt).quelle
Ist Ihr Server für die Clientauthentifizierung konfiguriert? In diesem Fall müssen Sie das Client-Zertifikat übergeben, während Sie eine Verbindung zum Server herstellen.
quelle
Ich hatte das gleiche Problem unter OSX OpenSSL 1.0.1i von Macports und musste CApath als Problemumgehung angeben (und wie im Ubuntu-Fehlerbericht erwähnt, lässt sogar ein ungültiger CApath openssl im Standardverzeichnis aussehen). Interessanterweise funktionierte die Verbindung mit demselben Server mithilfe der OpenSL-Funktionen von PHP (wie in PHPMailer 5 verwendet) einwandfrei.
quelle
Mit Client-Authentifizierung:
quelle
Legen Sie Ihre Zertifizierungsstelle und Ihr Stammzertifikat in / usr / share / ca-Zertifikat oder / usr / local / share / ca-Zertifikat ab. Dann
dpkg-Rekonfigurieren von CA-Zertifikaten
oder installieren Sie das ca-Zertifikat-Paket sogar mit apt-get neu.
Danach wird Ihr Zertifikat in der Datenbank des Systems gesammelt: /etc/ssl/certs/ca-certificates.crt
Dann sollte alles in Ordnung sein.
quelle
Erstellen Sie die Zertifikatskettendatei mit dem Zwischen- und Stammverzeichnis.
Dann überprüfen
www.example.com.cert.pem: OK Stellen Sie das Zertifikat bereit
quelle
Ich hatte das gleiche Problem: Es wurde behoben, nachdem der Betreff des Ausstellers im Zertifikat beibehalten wurde, da es als Betreff des Ausstellerzertifikats gilt.
Aktivieren Sie daher bitte "Betreff des Ausstellers im Zertifikat (cert.pem) == Betreff des Ausstellers (CA.pem)".
quelle
Diese Fehlermeldung bedeutet, dass CABundle nicht von (-CAfile ...) angegeben wird ODER die CABundle-Datei nicht von einem selbstsignierten Stammzertifikat geschlossen wird.
Mach dir keine Sorgen. Die Verbindung zum Server funktioniert auch dann, wenn Sie diese Nachricht von openssl s_client erhalten ... (vorausgesetzt, Sie machen auch keinen anderen Fehler)
quelle