В чем разница между хранилищем ключей и хранилищем доверенных сертификатов?
keystore
encryption-asymmetric
truststore
Роб Райт
источник
источник
TrustStore
per se . Или я не смог найти его в документации по Java (например,java.security.TrustStore
). Когда мы хотим доверять центру сертификации, ему доверяют черезKeyStore
(иKeyStore
передают вTrustManagerFactory
).KeyStore.load(InputStream is, char[] password)
( docs ) может принять нулевой пароль, и тогда он даст доступ к публичным сертификатам. То есть код, который хочет просмотреть склад доверенных сертификатов, не должен знать его пароль (по очень веским причинам!)Хранилище ключей содержит закрытые ключи. Это необходимо только в том случае, если вы являетесь сервером или если сервер требует аутентификации клиента.
Склад доверенных сертификатов содержит сертификаты CA для доверия. Если сертификат вашего сервера подписан распознанным центром сертификации, хранилище доверенных сертификатов по умолчанию, которое поставляется вместе с JRE, уже будет доверять ему (потому что оно уже доверяет надежным центрам сертификации), поэтому вам не нужно создавать собственный или добавлять что-либо к нему. от JRE.
Источник
источник
В рукопожатии SSL целью trustStore является проверка учетных данных, а целью keyStore является предоставление учетных данных .
KeyStore
keyStore в Java хранит закрытый ключ и сертификаты, соответствующие их открытым ключам, и требует, если вы являетесь сервером SSL или SSL требует аутентификации клиента.
доверенные сертификаты
TrustStore хранит сертификаты от третьих лиц, ваше Java-приложение или сертификаты, подписанные CA (центрами сертификации, такими как Verisign, Thawte, Geotrust или GoDaddy), которые можно использовать для идентификации третьих лиц.
TrustManager
TrustManager определяет, следует ли доверять удаленному соединению, т. Е. Является ли удаленная сторона тем, на кого она претендует, и KeyManager решает, какие учетные данные для аутентификации следует отправить на удаленный хост для аутентификации во время SSL-квитирования.
Если вы являетесь сервером SSL, вы будете использовать личный ключ во время алгоритма обмена ключами и отправлять клиенту сертификаты, соответствующие вашим открытым ключам, этот сертификат приобретается в хранилище ключей. На стороне клиента SSL, если он написан на Java, он будет использовать сертификаты, хранящиеся в trustStore, для проверки личности Сервера. Сертификаты SSL чаще всего поставляются в виде файла .cer, который добавляется в keyStore или trustStore с помощью любой утилиты управления ключами, например, keytool .
Источник: http://javarevisited.blogspot.ch
источник
Вас также может заинтересовать рецензия от Sun как часть стандартной документации JSSE:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
Как правило, хранилище доверенных сертификатов используется для хранения только открытых ключей в целях проверки, например, при проверке подлинности X.509. Для удобства управления администраторы и разработчики часто просто объединяют их в одном магазине.
источник
Вот описание из документации по Java в Справочном руководстве по расширению защищенных сокетов Java (JSSE) . Я не думаю, что это говорит вам о чем-то отличном от того, что говорили другие. Но это обеспечивает официальную ссылку.
источник
Первое и основное различие между trustStore и keyStore заключается в том, что trustStore используется TrustManager, чтобы определить, следует ли доверять удаленному соединению, keyStore используется из KeyManager, решая, какие учетные данные для аутентификации следует отправлять на удаленный хост для аутентификации во время рукопожатия SSL.
Другое отличие состоит в том, что keyStore теоретически содержит закрытые ключи, необходимые только в том случае, если вы запускаете сервер в соединении SSL или вы включили аутентификацию клиента на стороне сервера, а с другой стороны trustStore хранит открытый ключ или сертификаты от CA (Certificate Authorities), которые используются для доверяйте удаленной стороне или соединению SSL.
Фактически вы можете хранить в одном и том же файле как закрытые, так и открытые ключи, поскольку инструмент для управления этими файлами один и тот же (keytool), поэтому вы можете использовать один файл для обеих целей, но, вероятно, не следует .
По крайней мере, на моем Mac OSX
${user.home}/.keystore
хранилище ключей по умолчанию - это , а хранилище доверия по умолчанию -/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
.Если вы хотите переопределить их, вы должны добавить параметры JVM
-Djavax.net.ssl.keyStore /path/to/keyStore
или-Djavax.net.ssl.trustStore /path/to/trustStore
. Вам также может потребоваться установить пароль хранилища ключей в случаеjava.security.UnrecoverableKeyException: Password must not be null
использования параметра-Djavax.net.ssl.trustStorePassword=password
или-Djavax.net.ssl.trustStorePassword=password
Главный источник:
источник