В Java-приложениях для обеспечения безопасности данных и установления защищённых соединений (например, HTTPS) используется специальное хранилище — keystore. Оно предназначено для хранения секретной информации, такой как закрытые ключи и сертификаты.
Существуют различные форматы хранилищ, поддерживаемые Java:
JKS (Java KeyStore)
— традиционный формат, использующийся по умолчанию. Представляет собой файл с расширением .jks и применяется чаще всего.JCEKS
— расширенная версия JKS, в которой реализовано более надёжное шифрование (Triple DES). При необходимости можно преобразовать JKS-хранилище в JCEKS с помощью команды утилиты keytool.PKCS12
— формат, ориентированный на перенос и хранение пользовательских закрытых ключей и сертификатов. Часто используется для взаимодействия с внешними системами.
Каждая запись в keystore идентифицируется с помощью уникального имени — alias. В целях надёжности рекомендуется избегать alias’ов, отличающихся только регистром символов.
Безопасность данных в хранилище обеспечивается двойным способом: каждое ключевое значение может быть защищено индивидуальным паролем, а всё хранилище — отдельным общим паролем.
Вся информация в keystore делится на два типа:
Ключевые записи — пары закрытого и открытого ключей (private/public).
Доверенные сертификаты — сертификаты центров сертификации и других доверенных источников.
Для управления содержимым keystore Java предоставляет встроенную утилиту keytool, находящуюся в каталоге bin установки JDK. С её помощью можно создавать, просматривать, изменять и удалять ключи и сертификаты.
Как правило создаются keystore и truststore. Keystore - содержит личный ключ + сертификат (цепочку сертификатов) сервера, а truststore сертификат ЦА (root-ca).
Создание хранилища и добавление самоподписанного сертификата
Генерация самоподписанного сертификата и запись его в хранилище:
|
|
-alias
— имя ключа.-keystore
— файл keystore’а (если не существует — будет создан).-storepass
, -keypass
— пароли хранилища и ключа.-validity
— срок действия (в днях).-dname
— информация о владельце (DN).
Конвертация JKS хранилища в PKCS12:
Более современный формат
|
|
Добавление сертификата ЦА в truststore:
|
|
Экспорт сертификата ЦА из хранилища:
|
|
Просмотр содержимого сертификата:
|
|
Генерация SSL сертификата для JAVA в проде (ЦА):
Создать cnf
Конфиг файл для выпуска CSR
|
|
C cодержимым:
|
|
Выпустить приватный ключ
Он же будет использоваться для сертификата:
|
|
Выпустить CSR
|
|
Выпускаем сертификат с ЦА
Полученный сертификат можно использовать вместе с выпущенным ранее ключом
Для авторизации сервисов в Java приложении нужно использовать корневой сертификат + выпущенный сертификат и ключ.
Если при выпуске приватного ключа был указан пароль, также нужно будет указать пароль.
Выпустить pkcs12
password - указать новый пароль, который будет использоваться в дальнейшем:
|
|
Выпустить keystore
|
|
Выпустить truststore
|
|