В 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
| |
