curl-Befehl - Unable to load client-cert -8018
Ich versuche, eine Verbindung zu einem sicheren webservice über einen proxy mit dem curl-Befehl, aber ich bekomme folgende Fehler:
Unable to load client-cert -8018.
Komplette log:
[e-ballo@myserver]# curl -v -x proxy01.net:8080 https://endPointURL.com/SOAP --key ./cert.crt --cert ./cert.crt -capath=/etc/pki/tls/certs
* About to connect() to proxy proxy01.net port 8080 (#0)
* Trying 10.0.3.64... connected
* Connected to proxy01.net (10.0.3.64) port 8080 (#0)
* Establish HTTP proxy tunnel to endPointURL.com:443
> CONNECT endPointURL.com:443 HTTP/1.1
> Host: endPointURL.com:443
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.3.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Proxy-Connection: Keep-Alive
>
< HTTP/1.0 200 Connection established
<
* Proxy replied OK to CONNECT request
* Initializing NSS with certpath: sql:/home/e-ballo/
* Unable to initialize NSS database
* Initializing NSS with certpath: none
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Unable to load client cert -8018.
* NSS error -8018
* Closing connection #0
curl: (58) Unable to load client cert -8018.
Jede Idee, was diese Fehlermeldung bedeutet ? und wie kann ich es beheben ?
Vielen Dank im Voraus,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich auch erlebt, dieses Problem auf RHEL 6. curl kompiliert wurde mit NSS, die Sie sehen können, von der überprüfung der version:
Die Lösung ist die Bereitstellung von curl mit einem Verweis auf die NSS-Datenbank, in der das client-Zertifikat, das Sie verwenden möchten.
Erstellen Sie das Zertifikat
War ich ausgehend von einem Java-keystore, das erstellt wurde mit diesem Befehl (der alias-Wert wird verwendet, um Referenz das Zertifikat später):
Nun, das JKS-keystore umgewandelt werden müssen, um eine pkcs12-format:
Importieren Sie das Zertifikat in eine NSS-Datenbank
Als Nächstes erstellen Sie eine NSS-Datenbank in ein Verzeichnis Ihrer Wahl:
Diese certutil-Befehl erstellt 3 .db-Dateien, einschließlich cert8.db. Dies ist die "alte" db-format, sollte aber noch funktionieren. Anzeigen certutil-Dokumentation, wenn Sie erstellen müssen eine cert9.db-Datei statt.
Verwenden pk12util zu importieren client_keystore.p12 in die NSS-Datenbank
Optional anzeigen der gespeicherten Zertifikat in der Datenbank:
Zertifikat verwenden, das von curl
Das Zertifikat ist nun bereit, verwendet werden, die von LOCKE, aber wir lassen LOCKE wissen, wo es zu finden ist. Wie angegeben, in der curl-Handbuch, erstellen Sie eine SSL_DIR Umgebungsvariable:
Schließlich, den curl-Befehl:
Hinweis: die option-k angegeben ist hier, weil der server ein selbstsigniertes Zertifikat. Finden Sie die curl-Handbuch, wie Sie angeben, eine cacert.
Vergessen Sie nicht, das client-Zertifikat an die server-truststore wenn Sie gebraucht werden.
Referenz
If curl is built against the NSS SSL library then this option can tell curl the nickname of the certificate ... If you want to use a file from the current directory, please precede it with "./" prefix, in order to avoid confusion with a nickname.
Müssen wir importieren Sie die Datei in die NSS-Datenbank?Ich bereits korrigiert dieses problem, so werde ich die Lösung posten. Vielleicht kann jemand helfen.
Meine version von curl kompiliert wurde mit dem Netscape-Security-System (NSS) Bibliotheken statt den openSSL-Bibliotheken. Versionen von curl kompiliert mit diesen zwei Bibliotheken verwenden verschiedene Zertifikats-Zugriffs-Methoden. Ich rief eine flache Datei, die die openSSL-Methode.
Eine andere Lösung wird erhalten, NSS installiert, (es bereits auf den meisten Red Hat-Derivate), und erstellen Sie eine cert9.db-Datei, importieren Sie Ihr Zertifikat und den key (nach der Konvertierung in ein P12 mit openssl -vergessen Sie nicht, fügen Sie eine "freindlyName" oder nickname) in die db mit pk12util. Dann rufen Sie das Zertifikat, indem Sie es nickname und geben Sie das Passwort für die db.
Die andere Möglichkeit ist zu bekommen oder zu kompilieren, eine version von curl mit openssl-Bibliotheken. RedHat 5, ubuntu-oder windows-Version von curl sind Häufig bereits kompiliert so. Red Hat 6 kommt mit curl kompiliert für NSS.