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

StackOverflow https://stackoverflow.com/questions/1650596

  •  22-07-2019
  •  | 
  •  

Frage

Zusammenfassung: Wie installiere ich ein neues Root-Zertifikat in Java Java-Code mit

Wir haben eine Desktop-Anwendung, die verschiedene Web-Dienste zugreift. Vor kurzem einer von ihnen schalteten ihre SSL-Zertifikat einer signierten von Trustwave. Während die Trust SSL-Zertifikate durch regelmäßigen Internet-Browser akzeptiert werden, Java scheint nicht mit der Voraussetzung Root-Zertifikaten zu kommen, und wir verloren den Zugang zu dem angegebenen Web-Service mit der folgenden Fehlermeldung:

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

Wir haben eine temporäre Begnadigung durch den Anbieter zu überzeugen, zu Verisign zu wechseln, aber wenn sie zurückschalten müssen wir bereit sein. Also brauche ich unsere Desktop-Software, um automatisch das Root-Zertifikat von Trust installieren je nach Bedarf. Unsere Kunden sind nicht technisch versierten genug, um den Befehl keytool zu verwenden und ich möchte lieber Skript es nicht, da das erscheint mir als eine fragile Lösung (getrennte Implementierungen für Mac und PC, den Kampf gegen Vista Ausführungsbeschränkungen, Probleme die richtige JRE finden in installieren usw.).

Ich stelle mir das Keytool verwendet Java intern. Was Befehl konnte ich in Java, die Funktionalität von keytool zu replizieren und das Root-Zertifikat programmatisch installieren?

War es hilfreich?

Lösung

Ich weiß nicht, ob das möglich ist, aber Sie können Ihre eigene Trustmanager implementieren diese Verbindung oder diese CA. zu ermöglichen Hier sind die Grundlagen.

Andere Tipps

IMHO hat Sun nicht über eine API ausgesetzt keytool, in erster Linie Entwickler zu verhindern, dass der Satz von vertrauenswürdigen Zertifizierungsstellen ändern. Ich kann sehr vorstellen Angreifer einen solchen Code zu nutzen, ihre eigenen Root-Zertifikate in den Trust Store einzufügen, um das sehr Modell des Vertrauensspeicher zu beeinträchtigen.

In der Tat, wenn Sie an der Quelle des KeyTool Klasse (sun.security.tools Pakets) zu buchen, ist es nicht nur endgültig, es auch einen privaten Konstruktor hat jeden Anrufer eine Instanz der Klasse KeyTool von Code zu verhindern . KeyTool hat ein Hauptverfahren hat, wird die Kommandozeilen machen (und damit ein O Benutzer) möglicherweise die einzige Art und Weise, in die man mit KeyTool initialisieren und kommunizieren.

Der einzige (simpel) links Ansätze wäre:

  • Initialisieren keytool als Prozess der Anwendung und Kommandozeilen-Argumente übergeben das Root-CA-Zertifikat zu installieren. Dies allein ist eine schlechte Idee, und ich würde empfehlen, die Benutzer zu benachrichtigen, was auftritt.
  • Vermeiden Sie die Verwendung von keytool und stattdessen den Nutzern mit Anweisungen, wie das Root-CA-Installation unter Verwendung von Keyman oder KeyTool IUI . Was mir nur hier, ich bevorzuge die letztere.

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

Wenn Sie das Zertifikat der vertrauenswürdigen Stammschlüsselspeicher auf dem Desktop-Rechner installieren möchten, müssen Sie die Erlaubnis brauchen, das zu tun. Es ist das gleiche mit dem keytool , Sie ein Passwort benötigen, um die vertrauenswürdigen Stammschlüsselspeicher zuzugreifen. Wenn Sie möchten, schnell-n-schmutzig sein, können Sie

  • schreiben das Zertifikat in einer Datei oder einem Byte-Stream oder was auch immer
  • Import mit KeyTool Klasse (sun.security.tools.KeyTool)

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

Befehlszeilen Lösung. Auf dem Mac dem Java-Home ist / Library / Java / Start. Versuchen Sie:

$ sudo -i
# cd /Library/Java/Home
# keytool -import -trustcacerts -alias CAName -file CA.crt -keystore lib/security/cacerts

Ersatz CAName mit dem Namen Ihrer CA und ca.crt mit einem Pfad zur Zertifikatsdatei (PEM funktioniert). Es wird für einen Schlüsselspeicher Kennwort abfragt. Das Standardpasswort ist in dem verlinkten Artikel gegeben.

Ich habe dies von RapidSSL des CA-Zertifikaten für einen tun.

Sun veröffentlicht diesen Code eine aktualisierte Version Ihrer Datei cacerts basierend auf einer beliebigen Ziel-Host erstellen läuft https mit irgendwelchen Zert:

scroll top