Wie importiere ich ein neues Java-CA-Zertifikat, ohne das Befehlszeilenprogramm keytool zu verwenden?

8

Zusammenfassung: Wie installiere ich ein neues Wurzelzertifikat mit Java-Code in Java?

Wir haben eine Desktop-Anwendung, die auf verschiedene Web-Services zugreift. Kürzlich hat einer von ihnen sein SSL-Zertifikat auf einen von Trustwave signierten umgestellt. Während die Trustwave-SSL-Zertifikate von normalen Internetbrowsern akzeptiert werden, scheint Java nicht mit den erforderlichen Stammzertifikaten zu kommen, und wir haben den Zugriff auf den angegebenen Webdienst mit der folgenden Fehlermeldung verloren:

%Vor%

Wir haben eine zeitweilige Begnadigung erhalten, indem wir den Anbieter überzeugt haben, zu Verisign zurückzukehren, aber wenn sie zurückwechseln, müssen wir bereit sein. Also brauche ich unsere Desktop-Software, um das Trustwave-Root-Zertifikat nach Bedarf automatisch zu installieren. Unsere Kunden sind nicht technisch versiert genug, um den keytool-Befehl zu verwenden, und ich würde sie lieber nicht skripten, da dies für mich eine zerbrechliche Lösung ist (separate Implementierungen für Mac und PC, der Kampf gegen Vista-Ausführungsbeschränkungen, Probleme beim Finden der richtigen JRE) usw.).

Ich stelle mir vor, dass das Keytool Java intern verwendet. Welchen Befehl könnte ich innerhalb von Java verwenden, um die Funktionalität von keytool zu replizieren und das Root-Zertifikat programmatisch zu installieren?

    
Alexander Ljungberg 30.10.2009, 15:41
quelle

6 Antworten

2

Ich weiß nicht, ob das möglich ist, aber Sie könnten Ihren eigenen TrustManager implementieren, um diese Verbindung oder diese CA zuzulassen. Hier sind die Grundlagen.

    
Yishai 30.10.2009, 15:48
quelle
1

IMHO, Sun hat keytool nicht über eine API verfügbar gemacht, hauptsächlich um zu verhindern, dass Entwickler die Gruppe vertrauenswürdiger Zertifizierungsstellen ändern. Ich kann mir sehr gut vorstellen, dass Angreifer solchen Code ausnutzen, um ihre eigenen Root-Zertifikate in den Trust Store einzufügen, die das Modell des Truststores kompromittieren.

Wenn Sie sich die Quelle der KeyTool-Klasse (Paket sun.security.tools) ansehen, ist sie nicht nur endgültig, sondern hat auch einen privaten Konstruktor, der verhindert, dass ein Aufrufer eine Instanz der KeyTool-Klasse aus dem Code erzeugt . KeyTool verfügt über eine Hauptmethode, die die Befehlszeile (und damit einen Betriebssystembenutzer) möglicherweise zur einzigen Möglichkeit macht, mit KeyTool zu initialisieren und zu kommunizieren.

Die einzigen (vereinfachenden) Ansätze wären:

  • Initialisieren Sie keytool als einen Prozess aus der Anwendung und übergeben Sie Befehlszeilenargumente, um das Zertifikat der Stammzertifizierungsstelle zu installieren. Dies allein ist eine schlechte Idee, und ich würde empfehlen, den Benutzer darüber zu informieren, was vorkommt.
  • Vermeiden Sie die Verwendung von keytool und geben Sie stattdessen den Benutzern Anweisungen zur Installation der Stammzertifizierungsstelle mithilfe von Keyman oder KeyTool IUI . Ich spreche nur für mich selbst, bevorzuge das letztere.
Vineet Reynolds 30.10.2009 16:59
quelle
1

Sie können KeyTool immer als Prozess Runtime.exec(...) aufrufen.

    
Richard Perfect 30.10.2009 20:24
quelle
0

Wenn Sie das Zertifikat im Keystore des vertrauenswürdigen Stamms auf dem Desktopcomputer installieren möchten, benötigen Sie dazu die entsprechende Berechtigung. Dasselbe gilt für das Keytool . Sie benötigen ein Passwort, um auf den Keystore des vertrauenswürdigen Root zugreifen zu können. Wenn Sie schnell-n-schmutzig sein wollen, können Sie

  • schreibe das Zertifikat in eine Datei oder einen Bytestream oder was auch immer
  • Import mit KeyTool class ( sun.security.tools.KeyTool )

Aber IMHO, wenn das Zertifikat nicht gültig ist, dann ist es nicht vertrauenswürdig. Ich würde sagen, dafür gibt es einen guten Grund.

    
Miguel Ping 30.10.2009 15:48
quelle
0

Befehlszeilenlösung. Auf dem Mac ist das Java-Home / Library / Java /Zuhause. Probieren Sie:

%Vor%

Ersetzen Sie CAName durch den Namen Ihrer CA und CA.crt durch einen Pfad zu Ihrer Zertifikatsdatei (PEM funktioniert). Es wird nach einem Schlüsselspeicherkennwort gefragt. Das Standardkennwort ist in dem verknüpften Artikel angegeben.

Ich musste dies für eine CA-Zertifizierung von RapidSSL tun.

    
farcepest 10.10.2012 20:20
quelle
0

Sun hat diesen Code veröffentlicht, um eine aktualisierte Version Ihrer cacerts-Datei basierend auf einem beliebigen Zielhost zu erstellen, auf dem https mit beliebigen Zertifikaten ausgeführt wird:

Ссылка

Ihre neuen Cacerts werden im aktuellen Verzeichnis jssecacerts genannt. Kopieren Sie diese neue Datei einfach über Ihre jre / lib / security / cacerts-Datei.

Ich mache keinen Kommentar zur Sicherheit Ihrer neuen cacerts-Datei.

    
notalbert 24.02.2015 00:53
quelle

Tags und Links