Подтвердить что ты не робот

Вам не нужен пароль для доступа к магазину доверия (созданный с помощью java keytool)?

Я только что создал доверительный магазин с помощью java keytool (для аутентификации сервера на сервере, у которого нет сертификата CA). Однако я только что заметил что-то странное. Я начинаю свой клиент следующим образом:

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

(Примечание: НЕ указан пароль)

Вышеупомянутый вызов работает.


Однако, когда я пытаюсь это сделать:

java -classpath <STUFF> Client

Это не работает. (Очевидно, что это не работает, это требует доверия).


Мне предстояло пройти эту опцию (но я этого не сделал):

-Djavax.net.ssl.trustStorePassword=mypass

Вопрос. Вам не нужен пароль для доступа к доверенности? Пароль только для изменения? Как насчет хранилища ключей?

4b9b3361

Ответ 1

Пароль используется для защиты целостности хранилища ключей. если вы не предоставляете пароль магазина, вы все равно можете прочитать содержимое хранилища ключей. Команда keytool -list демонстрирует это поведение (используйте его с пустым паролем).

Ответ 2

В дополнение к @pascal-thivent отличный ответ:

Пароль хранилища ключей имеет две цели: если не указано, keytool отказывается заменить содержимое магазина новым содержимым, например. путем удаления существующих или добавления новых записей сертификата.

Конечно, если у вас есть доступ на запись для обновления файла хранилища ключей с помощью keytool (он не установлен), вы можете заменить его, используя другой инструмент, который не проверял пароль. И мы знаем, что хранилище и его формат читаются без пароля, поэтому, возможно, мы можем написать то, что мы хотим там.

То, где приходит пароль для проверки. Когда записи магазина записываются, предоставленный пароль хранилища используется для вычисления дайджеста содержимого магазина, как засоленный паролем. Это односторонний хеш/дайджест, поэтому без пароля вы не можете проверить, было ли изменено содержимое магазина или нет. Точно так же кто-то злонамеренный, который не знает пароль, также не может изменить содержимое магазина и создать хэш-код дайджеста, который будет создан этим паролем.

Поэтому, когда вы предоставляете пароль без пароля, keytool просто предупреждает вас, что он не может проверить, что хранилище не было изменено. Если вы указали неверный пароль или хранилище было изменено, вы получите другое сообщение:

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

keytool не удалось воссоздать существующий хэш-дайджест на основе текущего содержимого хранилища и пароля, который вы указали, так что либо пароль неверен, либо хранилище ключей хранилище - keytool не может сказать, но он предполагает что вы или программное обеспечение, читающее магазин, знают.

Обратите внимание, что в то время как термин ключевое хранилище используется в целом, он в равной степени относится к хранилищам и хранилищам доверия. Менее вообще, хранилище ключей чаще всего является хранилищем идентификаторов и содержит идентификаторы и их секретные секретные ключи, используемые, например, сервером с HTTPS. Трастовый магазин чаще всего содержит только открытые ключи и закрытые ключи, поэтому нет секретов, но важно определить, какие именно клиенты доверяют.

Ответ 3

По умолчанию пароль хранилища доверия JRE является "changeit". Если вы хотите программно изменить пароль хранилища доверия по умолчанию (cacerts) с помощью Java, перейдите эту ссылку.

Ответ 4

Если вы не укажете доверительное хранилище, вместо него используется значение по умолчанию. Я предполагаю, что вы получили сообщение об ошибке, что вам нужно указать доверительный магазин, чтобы доверять хосту, который вы запрашиваете? Доверенное хранилище по умолчанию находится в $JAVA_HOME/lib/security/jssecacerts.