Java Out-of-Box-Cacerts-Zertifikat sind SHA1 gibt es eine mit SHA2

0

Java / JDK / JRE haben einen Schlüsselspeicher cacerts unter dem Ordner lib \ Security, wie unten gezeigt

enter image description here

Java wird mit ca. 93 Zertifikaten ausgeliefert. Diese sind nicht selbst signiert. Diese werden von Java selbst geliefert

enter image description here

Diese Zertifikate sind SHA1-Zertifikate

Hintergrund

Die von uns verwendete Anwendung hängt davon ab, ob Java und unsere Firma angeben, dass sie sich von SHA1 entfernen und diese SHA1 in SHA2 ändern möchten.

Fragen

  1. Gibt es eine Java-Version / einen Java-Typ, der SHA2 für Out-of-Box-Zertifikate verwendet?
  2. Kann man out-of-box-Zertifikate durch SHA2 ersetzen?
SeanClt
quelle
Java unterstützt SHA2-Zertifikate vollständig. . Es ist auch wichtig darauf hinzuweisen cacerts unterstützt auch SHA2-Zertifikate. Stellen Sie sicher, dass Sie wissen, wie Zertifikate durch Lesen importiert werden diese
Ramhound
1
Oracle ist die Identität, die die Standard-Stammzertifizierungsstellen ausstellen müsste, um SHA256-Zertifikate zu sein. Es ist nicht klar, ob Sie den Inhalt von Cacerts verstehen oder nicht. . Sie können die Stammzertifizierungsstellen löschen und dann nur SHA256-Zertifikate hinzufügen, wenn Sie verstehen möchten, dass ein Java-Update möglicherweise oder möglicherweise Auswirkungen auf den Speicher hat.
Ramhound
Verstehen Sie, dass es einfach der von Java verwendete Zertifikatspeicher ist? Wenn Sie also keine SHA1-Zertifikate unterstützen möchten, fügen Sie keine SHA1-Zertifikate hinzu? Wie genau haben Sie überprüft, ob jedes Zertifikat im Java-Zertifikatspeicher nur SHA1 ist?
Ramhound
Frage bearbeitet wird, sind diese out of box Zertifikate nicht von uns hinzugefügt
SeanClt
Ich verstehe, es handelt sich um "Out-of-Box" -Zertifikate. Entfernen Sie einfach die SHA1-Zertifikate und ersetzen Sie sie durch die SHA256-Zertifikate, die Sie verwenden möchten.
Ramhound

Antworten:

1

Dies ist eine späte Antwort, aber es gibt ein wichtiges Missverständnis in der Frage, das für zukünftige Leser geklärt werden sollte. Die Ausgabe des Keytools kann irreführend sein: Es wird ein SHA1 angezeigt Fingerabdruck für alle Zertifikate, ob sie SHA1 oder SHA2 verwenden Signier-Hash-Funktion (was ist was du suchst). Der SHA1-Fingerabdruck ist einfach eine eindeutige ID des Zertifikats.

Um SHA2-Zertifikate in einem Bundle zu finden, können Sie sich nicht auf keytool -list verlassen. Sie müssen alle Zertifikate mit keytool -exportcert extrahieren und dann die Details für jedes Zertifikat mit keytool -printcert überprüfen: SHA2-Zertifikate haben diese Zeile in der Ausgabe:

Signature algorithm name: SHA256withRSA

SHA2-CA-Zertifikate sind seit JRE 1.6.14 Teil des Standard-Java-Cacerts-Bundles (siehe Zertifikat ttelesecglobalrootclass3ca), wenn nicht früher.

Jovča
quelle
0

Wenn CA-Anbieter ihre Zertifikate auf SHA-2 aktualisieren, senden sie die neuen Zertifikate zur Aufnahme in die verschiedenen Produkte, die SSL verwenden, z. B. Browser und Java.

Offensichtlich verfügen ältere Versionen eines bestimmten Produkts nicht über neuere Zertifikate (es gibt keinen Mechanismus, um diese automatisch zu aktualisieren).

Wenn der Anbieter kein neues Zertifikat sendet, wird es nicht in Java aufgenommen, und Sie müssen neuere Zertifikate manuell zum vertrauenswürdigen Java-Zertifikat-Repository hinzufügen.

Wenn Sie also eine Fehlermeldung erhalten, wie:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX-Pfadaufbau fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: Es wurde kein gültiger Zertifizierungspfad für das angeforderte Ziel gefunden

... dann hast du das wohl nicht richtig CA-Stammzertifikat und Sie müssen die Zertifikate manuell herunterladen und im Java-Keystore für vertrauenswürdige Zertifikate installieren. Hier ist eine Methode, um dies zu tun: http://mikepilat.com/2011/05/adding-a-certificate-authority-to-the-java-runtime.html

Christopher Broderick
quelle