Тип хранилища ключей: какой из них использовать?
посмотрев на файл java.security
моего JRE
, Я вижу, что тип хранилища ключей для использования по умолчанию установлен в JKS
. здесь, есть список типов ключей которые могут быть использованы.
есть ли рекомендуемый тип хранилища ключей? Каковы плюсы / минусы различных типов хранилищ ключей?
2 ответа:
есть еще несколько типов, чем то, что указано в стандартном списке имен, с которым вы связались. Вы можете найти больше в документация поставщиков криптографии. Наиболее распространенными являются, конечно
JKS
(по умолчанию) иPKCS12
(для файлов PKCS#12, часто с расширением.p12
и иногда.pfx
).JKS является наиболее распространенным, если вы остаетесь в мире Java. PKCS#12 не зависит от Java, особенно удобно использовать сертификаты (с закрытыми ключами) резервное копирование из браузера или из инструментов на основе OpenSSL (
keytool
не удалось преобразовать хранилище ключей и импортировать его закрытые ключи до Java 6, поэтому вам пришлось использовать другие инструменты).если у вас уже есть файл PKCS#12, часто проще использовать
PKCS12
тип напрямую. Можно конвертировать форматы, но это редко бывает необходимо, если вы можете выбрать тип хранилища ключей напрямую.В Java 7,
PKCS12
был в основном полезен в качестве keystore но для truststore (см. разница между хранилищем ключей и хранилищем доверия), потому что вы не можете хранить записи сертификата без закрытого ключа. В отличие от этого,JKS
не требует, чтобы каждая запись была записью закрытого ключа, поэтому вы можете иметь записи, содержащие только сертификаты, что полезно для хранилищ доверия, где вы храните список сертификатов, которым Вы доверяете (но у вас нет закрытого ключа для них).это изменилось в Java 8, так что вы можете теперь есть сертификат-только записи в
PKCS12
магазинах тоже. (Более подробную информацию об этих изменениях и дальнейших планах можно найти в JEP 229: создание хранилищ ключей PKCS12 по умолчанию.)есть несколько других типов хранилищ ключей, возможно, менее часто используемых (в зависимости от контекста), к ним относятся:
PKCS11
, для библиотек PKCS#11, как правило, для доступа к аппаратным криптографическим маркерам, но реализация поставщика Sun также поддерживает магазины NSS (от Mozilla) через это.BKS
, используя поставщика BouncyCastle (обычно используется для Android).Windows-MY
/Windows-ROOT
, если вы хотите получить доступ к хранилищу сертификатов Windows напрямую.KeychainStore
, если вы хотите использовать брелок OSX напрямую.
вот сообщение, которое вводит различные типы хранилища ключей в Java и различия между различными типами хранилища ключей. http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----Overview
Ниже приведены описания различных хранилищ ключей из сообщения:
JKS, хранилище ключей Java. Вы можете найти этот файл в солнце.безопасность.поставщик.JavaKeyStore. Это хранилище ключей специфично для Java, оно обычно имеет расширение из следующих. Этот тип хранилища ключей может содержать закрытые ключи и сертификаты, но их нельзя использовать для хранения секретных данных ключи. Поскольку это конкретное хранилище ключей Java, поэтому его нельзя использовать в другой язык программирования.
JCEKS, JCE key store. Вы можете найти этот файл в com.солнце.криптографический.поставщик.JceKeyStore. Это хранилище ключей имеет расширение jceks. Записи, которые могут быть помещены в хранилище ключей JCEKS, являются частными ключи, секретные ключи и сертификаты.
pkcs12 из этого является стандартным типом хранилища ключей, который может использоваться в Java и остальные языки. Вы можете найти эту реализацию хранилища ключей по адресу солнце.безопасность.формате pkcs12.PKCS12KeyStore. Он обычно имеет расширение p12 или pfx. Вы можете хранить закрытые ключи, секретные ключи и сертификаты этот тип.
PKCS11, это тип аппаратного хранилища ключей. Он обслуживает интерфейс для библиотека Java для подключения к аппаратным устройствам хранилища ключей, таким как Луна, nCipher. Вы можете найти эту реализацию в солнце.безопасность.pkcs11.P11KeyStore. При загрузке хранилища, вы не необходимо создать определенного поставщика с определенной конфигурацией. Этот keystore может хранить закрытые ключи, секретные ключи и цетрификаты. Когда загрузка хранилища ключей, записи будут извлечены из хранилища а затем преобразуется в записи программного обеспечения.