Вам не нужен пароль для доступа к хранилищу доверенных сертификатов (сделано с помощью Java Keytool)? - PullRequest
26 голосов
/ 26 февраля 2010

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

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

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

Вышеуказанный вызов работает.


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

java -classpath <STUFF> Client

Это не работает. (Очевидно, что это не работает, требуется хранилище доверенных сертификатов).


Я ожидал, что нужно будет передать эту опцию (но я этого не сделал):

-Djavax.net.ssl.trustStorePassword=mypass

Вопрос : Вам не нужен пароль для доступа к хранилищу доверенных сертификатов? Пароль только для модификации? А как насчет хранилища ключей?

Ответы [ 4 ]

38 голосов
/ 01 марта 2010

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

16 голосов
/ 20 мая 2016

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

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

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

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

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

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

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

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

0 голосов
/ 09 апреля 2015

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

0 голосов
/ 26 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...