2010-02-26 18 views
20

Ich habe gerade einen Truststore mit dem Java-Keytool erstellt (für die Server-Authentifizierung eines Servers, der kein CA-Zertifikat besitzt). Allerdings habe ich gerade etwas merkwürdiges bemerkt. Ich beginne meinen Klienten wie folgt aus:Benötigen Sie kein Passwort für den Zugriff auf einen Truststore (mit dem Java-Keytool)?

java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client 

(Anmerkung: es kein Passwort angegeben ist)

Die obigen Aufruf funktioniert. Jedoch


wenn ich versuche, dies:

java -classpath <STUFF> Client 

Es funktioniert nicht. (Offensichtlich funktioniert es nicht, es erfordert den Truststore).


Ich habe erwartet, in dieser Option passieren zu müssen (aber ich nicht):

-Djavax.net.ssl.trustStorePassword=mypass 

Frage: Sie benötigen kein Passwort ein Vertrauen zugreifen? Ist das Passwort nur zur Änderung? Was ist mit einem Schlüsselspeicher?

+0

@Pascal, ja. Der Server, den ich verwende, hat kein CA-Zertifikat, daher benötigt er einen Truststore, damit er die SSL-Authentifizierung für den Server durchführen kann. – sixtyfootersdude

+2

Ich verstehe auch nicht, warum ein Passwort für den TrustStore benötigt wird, welcher der Client-Teil des SSL ist. Insbesondere wenn eine CA nicht beteiligt ist. Hast du es geschafft, das zu lösen? –

Antwort

28

Das Passwort wird verwendet, um die Integrität eines Schlüsselspeichers zu schützen. Wenn Sie kein Speicherkennwort angeben, können Sie den Inhalt des Schlüsselspeichers weiterhin lesen. Der Befehl keytool -list demonstriert dieses Verhalten (verwenden Sie es mit einem leeren Kennwort).

+1

@sixtyfootersdude Ja, die Integrität wird nicht überprüft, aber Sie können trotzdem auf den Keystore zugreifen. –

+3

Diese Antwort bezieht sich auf den KeyStore, aber die Hauptfrage betrifft den TrustStore. Ich bin verwirrt. –

-2

Wenn Sie keinen Truststore angeben, wird stattdessen der Standardwert verwendet. Ich nehme an, Sie erhalten einen Fehler, dass Sie einen Truststore angeben müssen, um dem angeforderten Host zu vertrauen? Der Standard-Truststore befindet sich in $ JAVA_HOME/lib/security/jssecacerts.

+3

Hi bfoo, yeah Ich wusste, dass das ist, wo es standardmäßig aber das beantwortet meine Frage nicht. Offensichtlich funktioniert der Standard nicht und der von mir angegebene Standard ist. Meine Frage ist: Um einen Truststore zu lesen, brauchst du ein Passwort? Gibt es ein Standardpasswort? – sixtyfootersdude

-1

Standardmäßig ist das JRE Trust Store-Kennwort "changeit". Wenn Sie das Standardkennwort für den Trust Store (cacerts) programmgesteuert mithilfe von Java ändern möchten, gehen Sie bitte durch this link.

9

Neben @ pascal-thivent ‚s ausgezeichnete Antwort:

Das Kennwort für Schlüsselspeicher hat zwei Zwecke - wenn nicht im Lieferumfang enthalten, keytool weigert Sie den Inhalt des Speichers mit neuen Inhalten ersetzen zu lassen, z.B. indem Sie vorhandene Einträge löschen oder neue hinzufügen.

Wenn Sie Schreibzugriff haben, um die Keystore-Datei mit keytool zu aktualisieren (es ist nicht setuid), können Sie den Inhalt natürlich mit einem anderen Tool ersetzen, das das Kennwort nicht überprüft hat. Und wir wissen, dass der Speicher und sein Format ohne Passwort lesbar sind, also können wir vermutlich schreiben, was wir dort wollen.

Hier kommt das Bestätigungskennwort an. Wenn die Geschäftseinträge ausgeschrieben sind, wird das bereitgestellte Geschäftskennwort verwendet, um einen Auszug des Geschäftsinhaltes zu berechnen, der durch das Passwort gesalzen wird. Dies ist ein unidirektionaler Hash/Digest. Ohne das Passwort können Sie nicht überprüfen, ob der Inhalt des Speichers manipuliert wurde oder nicht. Gleichermaßen kann ein böswilliger Benutzer, der das Passwort nicht kennt, auch nicht den Inhalt des Shops ändern und den Digest-Hash erzeugen, der durch dieses Passwort erzeugt würde.

Deshalb, wenn Sie kein Passwort angeben, warnt Sie keytool nur, dass es nicht überprüfen kann, dass der Speicher nicht manipuliert wurde. Wenn Sie ein ungültig Kennwort angeben, oder den Laden hat manipuliert wurde, werden Sie eine andere Meldung:

Enter keystore password: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

keytool nicht in der Lage war, neu zu erstellen, die vorhandene Hash auf dem aktuellen Digest basiert Speicherinhalt und das von Ihnen angegebene Passwort, so dass entweder das Passwort falsch ist oder der Keystore kompromittiert ist - keytool kann nicht sagen, aber es setzt voraus, dass Sie oder die Software den Store lesen.

anzumerken, dass während der Begriff Schlüsselspeicher im Allgemeinen verwendet wird, ist es gleichermaßen auf Schlüsselspeicher verweist und Truststores. Weniger allgemein ist ein Keystore häufiger ein Identitätsspeicher und enthält Identitäten und ihre geheimen, privaten Schlüssel, wie sie z.B. von einem Server, auf dem HTTPS ausgeführt wird. A Truststore enthält oft nur öffentliche Schlüssel und keine privaten Schlüssel, also keine Geheimnisse, aber ist wichtig, um festzustellen, welche Identitäten ein Client vertraut.