Тип Keystore: какой из них использовать?
Посмотрев на файл java.security
моего JRE
, я вижу, что тип хранилища ключей, который будет использоваться по умолчанию, установлен в JKS
. Здесь приведен список типов хранилищ ключей, которые можно использовать.
Есть ли рекомендуемый тип хранилища ключей? Каковы плюсы и минусы различных типов хранилищ ключей?
- Присвоение имени домена локальному хосту для среды разработки
- Как установить ключ CA (самоподписанный SSL) на ubuntu?
- Thunderbird: Ошибка: imap.server.com: сервер не поддерживает RFC 5746, см. CVE-2009-3555
- Преобразовать .pem в .crt и .key
- Как всегда разрешать небезопасное соединение для определенного URL-адреса в хроме?
- Как создать самозаверяющий сертификат с openssl?
- Как установить: OpenSSL + WAMP
- По умолчанию SecurityProtocol в .NET 4.5
- Как заблокировать определенный HTTPS-трафик?
- Недопустимый самоподписанный SSL-сертификат - «Тема альтернативного имени отсутствует»
- Как создать формат BKS (BouncyCastle) Java Keystore, который содержит цепочку сертификатов клиента
- «Java недоступен» в Firefox 32 бита
- Как перечислить / экспортировать закрытые ключи из хранилища ключей?
Есть еще несколько типов, чем указано в списке стандартных имен, к которому вы привязались. Дополнительную информацию вы можете найти в документации для криптографических поставщиков . Наиболее распространенными являются, конечно же, 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
магазинах PKCS12
. (Более подробную информацию об этих изменениях и дальнейших планах можно найти в JEP 229: Создать PKCS12 Keystores по умолчанию .)
Существует несколько других типов хранилищ ключей, возможно, менее часто используемых (в зависимости от контекста), в том числе:
-
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 Key Store. Вы можете найти этот файл на sun.security.provider.JavaKeyStore. Это хранилище ключей является специфичным для Java, оно обычно имеет расширение jks. Этот тип хранилища ключей может содержать секретные ключи и сертификаты, но он не может использоваться для хранения секретных ключей. Поскольку это конкретное хранилище ключей Java, поэтому оно не может использоваться на других языках программирования.
JCEKS, магазин ключей JCE. Вы можете найти этот файл на com.sun.crypto.provider.JceKeyStore. Это хранилище ключей имеет расширение jceks. Записи, которые могут быть помещены в хранилище ключей JCEKS, – это секретные ключи, секретные ключи и сертификаты.
PKCS12, это стандартный тип хранилища ключей, который может использоваться на Java и других языках. Вы можете найти эту реализацию хранилища ключей на sun.security.pkcs12.PKCS12KeyStore. Обычно он имеет расширение p12 или pfx. Вы можете хранить секретные ключи, секретные ключи и сертификаты этого типа.
PKCS11, это аппаратный тип хранилища ключей. Он поддерживает интерфейс для библиотеки Java для подключения к аппаратным хранилищам ключей, таким как Luna, nCipher. Вы можете найти эту реализацию на sun.security.pkcs11.P11KeyStore. Когда вы загружаете хранилище ключей, вам не нужно создавать конкретного поставщика с определенной конфигурацией. Это хранилище ключей может хранить секретные ключи, секретные ключи и cetrificates. При загрузке хранилища ключей записи будут извлекаться из хранилища ключей, а затем преобразуются в записи программного обеспечения.