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

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

Вопрос

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

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

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

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


Однако когда я пробую это:

java -classpath <STUFF> Client

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


Я ожидал, что мне придется передать этот вариант (но я этого не сделал):

-Djavax.net.ssl.trustStorePassword=mypass

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

Это было полезно?

Решение

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

Другие советы

В дополнение к превосходному ответу @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.А хранилище доверенных сертификатов чаще всего содержит только открытые ключи и не содержит секретных ключей, поэтому секретов нет, но важно определить, какие личности клиент доверяет.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top