2012-05-07 9 views
14

Ich versuche, eine Anwendung auf Tomcat 6 zu erhalten, um eine Verbindung zu einem LDAP-Server über SSL herzustellen.Importiertes Zertifikat in Java-Keystore, JVM ignoriert das neue Zertifikat

Ich importierte Zertifikat des Servers mit bis zu Keys:

C:\Program Files\Java\jdk1.6.0_32\jre\lib\security>keytool -importcert -trustcacerts -file mycert -alias ca_alias -keystore "c:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts" 

Wenn ich Tomcat starten mit SSL-Debugging eingeschaltet wird, nach Protokollen Tomcat die richtige Zertifikat-Datei verwendet:

trustStore is: C:\Program Files\Java\jdk1.6.0_32\jre\lib\security\cacerts 

jedoch , Tomcat fügt das gerade importierte Zertifikat nicht hinzu - alle anderen Zertifikate in der Datei cacerts werden in das Protokoll gedruckt - und die Verbindung schlägt fehl:

handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

Neustart von Tomcat hilft nicht. Ich habe mit keytool -list-Befehl verifiziert, dass das neue Zertifikat tatsächlich in der Datei vorhanden ist.

Warum Tomcat ignoriert mein neues cert?

EDIT:

Es scheint, dass das Problem von Windows 7 Virtuals verursacht wurde. Keytool erstellte eine neue Kopie der cacert-Datei, und Tomcat verwendete die ursprüngliche Datei.

+0

Enthält die Datei 'mycert' die gesamte Zertifikatskette? Java möchte, dass der gesamte Vertrauensweg im Speicher ist. – Romain

+0

Nur ein einfacher Vorschlag, gehen Sie zu Ihrem 'C: \ Users \ YourAccountName', ein Dateiname' .keystore' wird dort sein, öffnen Sie es und entfernen Sie Ihre vorherige, und dann machen Sie, was Sie wieder getan haben.Hoffentlich wird das die Dinge für Sie regeln :-) –

+1

@Romain Nein, ein vertrauenswürdiges Zertifikat hat nichts mit der Kette zu tun. Jedes Zertifikat, das als vertrauenswürdiges Zertifikat importiert wird, wird wie ein vertrauenswürdiges Stammzertifikat behandelt. – emboss

Antwort

4

Überprüfen Sie, ob es einen Schlüssel mit denselben CN-Informationen aber einem anderen Alias ​​gibt.

Ich hatte ähnliche Probleme zuvor, als ich versuchte, eine neuere Version eines Zertifikats zu importieren, aber die ältere Version im Keystore. Meine Java-Programme würden einfach den ersten übereinstimmenden CN-Schlüssel im Keystore finden (welcher der alte war) und versuchen, diesen zu verwenden, obwohl es einen neueren gab, der auch dem CN entsprach.

Stellen Sie außerdem sicher, dass das authentifizierende Stammzertifikat (und gegebenenfalls das Zwischenzertifikat) im Keystore vorhanden ist. Wenn Sie sich bei einem der wichtigsten Sicherheitsanbieter wie Verisign oder Globalsign authentifizieren, erhalten Sie in der Regel die Stamm- und Zwischenzertifikate. Wenn diese Zertifikate bereits im Keystore vorhanden sind, vergewissern Sie sich, dass sie noch gültig sind. Sie müssen alle Zertifikate von Ihrem persönlichen Zertifikat in der Authentifizierungskette bis zum Stammverzeichnis haben, das in Ihrem Schlüsselspeicher vorhanden ist, damit es Ihre Anmeldeinformationen überprüfen kann.

+0

Das scheint nicht das Problem zu sein, aber danke für den Vorschlag – tputkonen

+0

Ich habe meine Antwort bearbeitet. Haben Sie überprüft, ob das Root-Zertifikat für Ihre Zertifizierungsstelle im Keystore vorhanden ist? – wattostudios

+1

Sie müssen keine Zertifikate über einem Zertifikat hinzufügen, das bereits im Trust Store vorhanden ist. Jedes Zertifikat im Geschäft wird ohne weitere Validierung als vertrauenswürdig eingestuft. Aber guter Rat mit dem Alias! – emboss

0

Was Sie beschrieben, ist genau das, was ich bei der Verwendung von cmd.exe und einem regulären Benutzer obwohl Mitglied der administrativen Gruppe auf einem Windows-Server erhalten habe. Sie müssen cmd.exe im Verwaltungsmodus starten, um die Änderungen in cacerts-Dateien zu übernehmen. Zumindest auf den Win2k8 OS's.

Wenn Sie dies nicht tun, werden Sie in der keytool.exe -list anzeigen die neu hinzugefügten certs zeigen, aber Tomcat wird sie nicht sehen. Nicht sicher warum. Aber wenn Sie es hinzufügen mit cmd.exe als Administrator gestartet Tomcat ist in Ordnung mit den neu hinzugefügten Zertifikate.

Sie können auch Djavax.net.debug="ssl,handshake" verwenden, um zu sehen, was Tomcat aus der Datei cacerts liest.

14

JVM muss nach dem Import von Zertifikaten in den Keystore neu gestartet werden.