Определения Truststore и Keystore

Ответы:

268

Хранилище ключей содержит закрытые ключи и сертификаты с соответствующими им открытыми ключами.

Склад доверенных сертификатов содержит сертификаты от других сторон, с которыми вы собираетесь общаться, или от центров сертификации, которым вы доверяете для идентификации других сторон.

Darron
источник
12
Хотя это должно быть на практике, они могут (и часто так) один и тот же. На самом деле вы можете импортировать закрытый ключ и открытый сертификат в [truststore] по умолчанию [java home] / jre / lib / security / cacerts. Утилита keytool не делает различий между этими двумя терминами, только в типах магазинов (то есть - JKS против PKCS12). В этом отношении Java делает то же самое в исходном коде. Вы создаете java.security.KeyStore и используете диспетчер доверия для управления сертификатами в нем, но класс TrustStore отсутствует.
4
Ява не имеет TrustStore per se . Или я не смог найти его в документации по Java (например, java.security.TrustStore). Когда мы хотим доверять центру сертификации, ему доверяют через KeyStoreKeyStoreпередают в TrustManagerFactory).
июня
5
Стоит отметить, что KeyStore.load(InputStream is, char[] password)( docs ) может принять нулевой пароль, и тогда он даст доступ к публичным сертификатам. То есть код, который хочет просмотреть склад доверенных сертификатов, не должен знать его пароль (по очень веским причинам!)
xverges
83
  1. Хранилище ключей содержит закрытые ключи. Это необходимо только в том случае, если вы являетесь сервером или если сервер требует аутентификации клиента.

  2. Склад доверенных сертификатов содержит сертификаты CA для доверия. Если сертификат вашего сервера подписан распознанным центром сертификации, хранилище доверенных сертификатов по умолчанию, которое поставляется вместе с JRE, уже будет доверять ему (потому что оно уже доверяет надежным центрам сертификации), поэтому вам не нужно создавать собственный или добавлять что-либо к нему. от JRE.

Источник

ha9u63ar
источник
73

В рукопожатии 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

Аникет Тхакур
источник
31

Вас также может заинтересовать рецензия от Sun как часть стандартной документации JSSE:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

Как правило, хранилище доверенных сертификатов используется для хранения только открытых ключей в целях проверки, например, при проверке подлинности X.509. Для удобства управления администраторы и разработчики часто просто объединяют их в одном магазине.

Питер Мулариен
источник
1
Дает 404 к сожалению
Крис Бич
@ChrisBeach - обновили ссылку на правильную ссылку на сайте Oracle.
Питер Мулариен
1
Склад доверенных сертификатов
Маркиз Лорн
9

В Java, в чем разница между хранилищем ключей и хранилищем доверенных сертификатов?

Вот описание из документации по Java в Справочном руководстве по расширению защищенных сокетов Java (JSSE) . Я не думаю, что это говорит вам о чем-то отличном от того, что говорили другие. Но это обеспечивает официальную ссылку.

Хранилище ключей / доверенное хранилище

Склад ключей - это база данных ключевых материалов. Материал ключа используется для различных целей, включая аутентификацию и целостность данных. Доступны различные типы хранилищ ключей, включая PKCS12 и Oracle JKS.

Вообще говоря, информация о хранилище ключей может быть сгруппирована в две категории: записи ключей и записи доверенных сертификатов. Запись ключа состоит из идентификатора объекта и его закрытого ключа и может использоваться для различных криптографических целей. Напротив, запись доверенного сертификата содержит только открытый ключ в дополнение к идентификатору объекта. Таким образом, запись доверенного сертификата не может использоваться там, где требуется закрытый ключ, например, в javax.net.ssl.KeyManager. В реализации JKS JDK хранилище ключей может содержать как записи ключей, так и записи доверенных сертификатов.

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

Запись должна быть добавлена ​​в доверенное хранилище, только если пользователь доверяет этой сущности. Генерируя пару ключей или импортируя сертификат, пользователь доверяет этой записи. Любая запись в хранилище доверенных сертификатов считается доверенной.

Может быть полезно иметь два разных файла хранилища ключей: один, содержащий только записи ключей, а другой, содержащий записи доверенных сертификатов, включая сертификаты CA. Первая содержит личную информацию, а вторая - нет. Использование двух файлов вместо одного файла хранилища ключей обеспечивает более четкое разделение логического различия между вашими собственными сертификатами (и соответствующими личными ключами) и сертификатами других. Чтобы обеспечить большую защиту ваших личных ключей, храните их в хранилище ключей с ограниченным доступом и предоставляйте доверенные сертификаты в более общедоступном хранилище ключей, если это необходимо.

jww
источник
4
  1. Первое и основное различие между trustStore и keyStore заключается в том, что trustStore используется TrustManager, чтобы определить, следует ли доверять удаленному соединению, keyStore используется из KeyManager, решая, какие учетные данные для аутентификации следует отправлять на удаленный хост для аутентификации во время рукопожатия SSL.

  2. Другое отличие состоит в том, что keyStore теоретически содержит закрытые ключи, необходимые только в том случае, если вы запускаете сервер в соединении SSL или вы включили аутентификацию клиента на стороне сервера, а с другой стороны trustStore хранит открытый ключ или сертификаты от CA (Certificate Authorities), которые используются для доверяйте удаленной стороне или соединению SSL.

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

  3. По крайней мере, на моем 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

Главный источник:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

alessiop86
источник