SSL Falsches Zertifikat Fehler
Ich habe Schwierigkeiten, eine Verbindung zu einer sicheren Website mit einem Java-Programm. Ich habe importiert 3 Zertifikate von dem server, dass ich eine Verbindung hergestellt werden soll; den öffentlichen, inter-und root-Zertifikat. Ich habe richtig importiert die 3 certs, um die java cacerts. Und auch angegeben im Aufruf der Java-Klasse mit den folgenden Parametern:
java -Djavax.net.debug=ssl
Djavax.net.ssl.keystore=JAVACACERTS -Djavax.net.ssl.keystorePassword=changeit -server -cp $CLASSPTH -Xmx500m SendOrderResponse
Allerdings bin ich mir immer eine "bad_certificate" Fehler. Ich schaute auf die details der Protokolle und es scheint, wie das root Zertifikat ist nicht in der Zertifikatkette.
Jede Idee, warum es passiert ist? wenn ich importiert habe die 3 certs in die Java cacerts? Ich gehe davon aus, dass die schlechten Zeugnis geworfen wurde, weil die Zertifikat-Kette Fehler.
- gibt es irgendwelche zusätzlichen Angaben, gefolgt von "BAD_CERTIFICATE" Fehler ?
- hi @ringbearer, dies ist die einzige Ausnahme, die ausgelöst durch Java: javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schlage vor, Sie laufen:
Vorausgesetzt, der remote-server erfordert oder anfordert, client-Zertifikat-Authentifizierung, es sollte senden Sie eine Liste der zulässigen CAs.
Senden Sie ein Zertifikat letztlich unterzeichnet von einer dieser CAs.
Der ssl-Spezifikation nicht verlangen, dass Sie senden Sie die CA, aber Sie sollten senden Sie das Zertifikat und die vollständige intermediate chain für die CA.
Meine Erfahrung ist, dass zwei CA-Zertifikate Aussehen kann sehr ähnlich zu einander. Der Umzug zu 2048 bit hat nicht geholfen, in dieser Hinsicht. Doppel-check.
Als seitliche Anmerkung, die Ihren Kunden erhielt das schlechte Zertifikat-Warnung. Liegt das problem mit den Zertifikaten, die der client sendet, nicht die Validierung von server-Zertifikaten.
(Bearbeiten)
Habe ich schon erwähnt, dass die Zertifikate, die Sie senden muss gültig sein ? insbesondere
Sieht es aus wie Sie sind nicht mit client-Zertifikaten.
In diesem Fall nicht die
javax.net.ssl.keystore
Parameter in der client-Anwendung. Importieren Sie nur die Wurzel (und vielleicht auch Mittelstufe) - Zertifikate in Ihrem truststore (cacerts
Standard) sollten ausreichend sein, auch.Mehr details über keystore/truststore in dieser Antwort: https://stackoverflow.com/a/6341566/372643
openssl s_connect -connect SERVERHOST:443
und wieder folgende Fehlermeldung unter:CONNECTED(00000003) depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C verify error:num=20:unable to get local issuer certificate verify return:0 3110:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1052:SSL alert number 42 3110:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:226:
-CApath
/-CAfile
Optionen.Wenn Sie importiert haben, werden die Zertifikate als versuchen Sie, diese
und als führen Sie den java-client