Какова цель хранилища ключей.jks?

Меня попросили создать хранилище ключей jks на основе созданного нами сертификата. Я прочитал немного по этой теме, но я все еще запутался в нескольких пунктах:

Предполагается, что закрытый ключ сертификата хранится в файле ключей.jks?

Если да - куда это входит? Используя keytool, он не требует создания файла jks.

Если нет - какова цель файла JKS? Зачем моему приложению это нужно, а не просто читать в сертификате напрямую? И почему keytool требует пароль для создания JKS, если он просто содержит открытый ключ?

2 ответа

Решение

Предполагается, что закрытый ключ сертификата хранится в файле ключей.jks?

Да, если у вас есть сертификат и он там хранится.

Если да - куда это входит? Используя keytool, он не требует создания файла jks.

Это потому, что вы также можете использовать его как хранилище доверенных сертификатов, которое содержит только доверенные сертификаты.

Чтобы получить закрытый ключ, вам нужно сначала преобразовать его и его сертификат в файл PKCS#12, используя opensslВ ответ на многочисленные вопросы, такие как этот.

Если нет - какова цель файла JKS? Зачем моему приложению это нужно, а не просто читать в сертификате напрямую?

Потому что вашему приложению также нужен закрытый ключ сертификата.

И почему keytool требует пароль для создания JKS, если он просто содержит открытый ключ?

Хранилище ключей имеет пароль, потому что это объект, связанный с безопасностью.

Целью хранилища ключей является защита конфиденциальности и целостности криптографических ключей с использованием алгоритмов на основе паролей. Конфиденциальность означает, что ключи хранятся в секрете; их может использовать только тот, кто знает пароль; это полезно для закрытых ключей и секретных ключей. Целостность означает, что изменение ключей может быть обнаружено кем-то, кто знает пароль; это полезно для открытых ключей и секретных ключей.

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

Если у вас есть существующая пара ключей и вы хотите импортировать ее в хранилище ключей в формате JKS, самый простой способ - использовать OpenSSL для создания хранилища ключей в формате PKCS #12, а затем использовать keytool преобразовать это в хранилище ключей JKS. Обычно, keytool предполагает саму генерацию пары ключей, поэтому закрытый ключ будет храниться там с самого начала.

Вы должны проверить целостность открытого ключа или сертификата, прежде чем использовать его для шифрования сообщения или проверки подписи. В противном случае злоумышленник может заменить ключ на тот, которым он владеет, и действовать как человек посередине. Если вы просто читаете открытый ключ из файла, вы не знаете, что он действительно принадлежит вашему предполагаемому получателю. Но если вы храните код аутентификации сообщения на основе пароля с открытым ключом, вы можете убедиться, что он не был подделан.

Другие вопросы по тегам