Посмотрев на java.security
мой файл JRE
, я вижу, что тип хранилища ключей, используемый по умолчанию, установлен на JKS
. Здесь есть список типов хранилищ ключей, которые можно использовать.
Есть ли рекомендуемый тип хранилища ключей? Каковы плюсы и минусы различных типов хранилищ ключей?
Ответы:
Типов несколько больше, чем указано в стандартном списке имен, с которым вы связались. Вы можете найти больше в документации провайдеров криптографии . Наиболее распространенными являются
JKS
(по умолчанию) иPKCS12
(для файлов PKCS # 12, часто с расширением,.p12
а иногда и с расширением.pfx
).JKS является наиболее распространенным, если вы остаетесь в мире Java. PKCS # 12 не зависит от Java, особенно удобно использовать сертификаты (с закрытыми ключами), резервные копии которых созданы из браузера или из инструментов на основе OpenSSL (
keytool
не удалось преобразовать хранилище ключей и импортировать его закрытые ключи до версии Java 6. , поэтому пришлось использовать другие инструменты).Если у вас уже есть файл PKCS # 12, часто проще использовать этот
PKCS12
тип напрямую. Можно конвертировать форматы, но это редко необходимо, если вы можете напрямую выбрать тип хранилища ключей.В Java 7 он
PKCS12
был в основном полезен в качестве хранилища ключей, но в меньшей степени для хранилища доверенных сертификатов (см. Разницу между хранилищем ключей и хранилищем доверенных сертификатов ), потому что вы не могли хранить записи сертификатов без закрытого ключа. Напротив,JKS
не требуется, чтобы каждая запись была записью с закрытым ключом, поэтому вы можете иметь записи, содержащие только сертификаты, что полезно для доверенных хранилищ, где вы храните список сертификатов, которым вы доверяете (но у вас нет закрытый ключ для них).Это изменилось в Java 8, поэтому теперь в
PKCS12
магазинах можно хранить только сертификаты . (Более подробную информацию об этих изменениях и дальнейших планах можно найти в JEP 229: Создание хранилищ ключей PKCS12 по умолчанию .)Есть несколько других типов хранилищ ключей, которые, возможно, используются реже (в зависимости от контекста), в том числе:
PKCS11
, для библиотек PKCS # 11, обычно для доступа к аппаратным криптографическим токенам, но реализация поставщика Sun также поддерживает хранилища NSS (из Mozilla) через это.BKS
с помощью поставщика BouncyCastle (обычно используется для Android).Windows-MY
/Windows-ROOT
, если вы хотите напрямую получить доступ к хранилищу сертификатов Windows.KeychainStore
, если вы хотите напрямую использовать связку ключей OSX.источник
KeyStore
реализацию для этого). Однако вы можете загружать их на лету в экземпляр хранилища ключей (обычно JKS, тип по умолчанию) в памяти с помощьюCertificateFactory
(как показано в этом ответе ).JKS
он изменился наJCEKS
Вот сообщение, которое знакомит с различными типами хранилищ ключей в Java и различиями между различными типами хранилищ ключей. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----Overview
Ниже приведены описания различных хранилищ ключей из сообщения:
источник
Если вы используете Java 8 или новее, вам обязательно следует выбрать
PKCS12
значение по умолчанию, начиная с Java 9 ( JEP 229 ).Преимущества по сравнению с
JKS
иJCEKS
:PKCS12
это стандартный формат, его могут читать другие программы и библиотеки 1JKS
иJCEKS
довольно небезопасны. Об этом можно судить по количеству инструментов для подбора паролей этих типов хранилищ ключей, особенно популярных среди разработчиков Android. 2, 31 Есть JDK-8202837 , который был исправлен в Java 11
2 Количество итераций для PBE, используемого всеми типами хранилищ ключей (включая PKCS12), раньше было довольно недельным ( CVE-2017-10356 ), однако это было исправлено в 9.0.1, 8u151, 7u161 и 6u171
3 Для дальнейшего чтения:
источник