Всякий раз, когда мы говорим о безопасной связи по сетям, часто всплывают такие ключевые слова, как “SSL”, “Хранилища ключей”, “JKS”. Обычно хранилища ключей и хранилища доверия используются, когда нашим приложениям необходимо безопасно обмениваться данными по протоколу SSL/TLS. Для получения более подробной информации о том, как работает связь по протоколу SSL, следите за блогом, упомянутым ниже.
SSL-сертификаты
Эти хранилища ключей и хранилища доверия представляют собой защищенные паролем файлы, которые находятся в той же файловой системе, что и приложение. По умолчанию и наиболее широко используемым форматом для этих файлов является JKS (хранилище ключей Java). По крайней мере, так было до Java 8.
В Java 9 формат хранилища ключей по умолчанию был изменен с JKS на PKCS12. Наиболее примечательное различие между JKS и PKCS12 заключается в том, что в то время как JKS был форматом, специфичным для Java, PKCS12 представляет собой стандартизированный и нейтральный к языку способ хранения зашифрованных закрытых ключей и сертификатов. Вот выдержка из официального определения –
“PKCS12 (Стандарты криптографии с открытым ключом) определяет формат архивного файла для хранения сертификатов сервера, промежуточного сертификата, если таковой имеется, и закрытого ключа в одном зашифрованном файле”
Так почему же Java 9 сделала PKCS12 по умолчанию?
- Могут храниться секретные ключи, закрытые ключи и сертификаты
- PKCS12 – это стандартный формат, он может быть прочитан другими программами и библиотеками, в то время как JKS специфичен для java.
- Улучшенная безопасность: JKS довольно небезопасен. Это видно по количеству инструментов для перебора паролей этого типа хранилища ключей, особенно популярных среди разработчиков Android [1].
Если вы работаете на Java, то хранилище ключей Java – довольно естественное место для хранения закрытых ключей. Приложения Java обычно ожидают получения необходимых им ключей от JKS, и к ним легко получить доступ из ваших собственных приложений Java. Однако JKS недоступен извне Java. С другой стороны, файлы PKCS12 (они же PFX) не зависят от языка, более безопасны и существуют достаточно долго, чтобы их поддерживали практически везде. Если вы хотите преобразовать хранилище ключей JKS (.jks) в хранилище ключей PKCS12 (.p12), вы можете сделать это, выполнив следующую команду.
keytool -importkeystore -srckeystore [MY_KEYSTORE.jks] -destkeystore [MY_FILE.p12] -srcstoretype JKS – deststoretype PKCS12 -deststorepass [ПАРОЛЬ_PKCS12]
[MY_KEYSTORE.jks]
: Путь к хранилищу ключей, которое вы хотите преобразовать.[MY_FILE.p12]
: путь к файлу PKCS12 (с расширением .p12 или .pfx), который будет создан.[ПАРОЛЬ_PKCS12]
: Пароль, который будет запрошен при открытии файла PKCS12.
В конце концов, решение о том, какой тип хранилища ключей использовать, должно основываться на том, как вы планируете использовать закрытый ключ, то есть: какие приложения должны будут использовать закрытый ключ и какой формат (ы) хранилища ключей они уже обрабатывают. PKCS12 – это более гибкий и безопасный вариант. Спасибо, что дочитали до конца, если у вас есть какие-либо вопросы по этому поводу, не стесняйтесь упоминать их в комментариях.
[1] – https://www.ndss-symposium.org/wp-content/uploads/2018/02/ndss2018_02B-1_Focardi_paper.pdf
Оригинал: “https://dev.to/manukam/pkcs12-b2m”