51просмотров
98.1%от подписчиков
25 февраля 2026 г.
Score: 56
Привет! 👋 Сегодня практичный и очень боевой пост. Разберёмся, как из обычных файлов сертификатов 🔵 key.key 〰️ приватный ключ 🔵 cert.crt 〰️ серверный сертификат 🔵 ca-cert.pem 〰️ цепочка CA собрать ✅ keystore.jks (ключ + сертификат + цепочка)
✅ truststore.jks (только доверенные CA) Такой сценарий часто нужен для
🔵 Java-приложений
🔵 Spring Boot
🔵 Kafka
🔵 Tomcat
🔵 любых JVM-сервисов с TLS Предположим, что все файлы лежат в текущей директории. ✅ Проверяем, что ключ подходит к сертификату. Очень важно убедиться, что ключ и сертификат 〰️ пара. openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in key.key | openssl md5 Хэши должны совпасть. Если нет 〰️ это разные ключи. Дальше идти бессмысленно. ✅ Создаём промежуточный PKCS12 JKS напрямую из key + crt не собрать. Поэтому сначала делаем .p12 openssl pkcs12 -export \ -inkey key.key \ -in cert.crt \ -certfile ca-cert.pem \ -name key \ -out keystore.p12 Терминал попросит задать пароль 〰️ задаём и обязательно запоминаем его. Проверим содержимое keytool -list -v -keystore keystore.p12 -storetype PKCS12 ✅ Конвертируем PKCS12 ➡️ JKS (keystore) Теперь создаём полноценный Java keystore keytool -importkeystore \ -srckeystore keystore.p12 -srcstoretype PKCS12 \ -destkeystore keystore.jks -deststoretype JKS \ -alias key Что произойдёт
🔵 терминал спросит пароль от p12
🔵 предложит задать пароль для keystore.jks Проверяем keytool -list -v -keystore keystore.jks Ожидаем увидеть 🔵 Alias name: key
🔵 Entry type: PrivateKeyEntry
🔵 Certificate chain length: ... Это значит: ключ + цепочка корректно импортированы ✅ 🔒 Создаём truststore.jks Truststore содержит только доверенные CA
Без приватных ключей. ▫️ Вариант 🔠 если в PEM один сертификат keytool -importcert \ -keystore truststore.jks -storetype JKS \ -alias ca \ -file ca-cert.pem Проверяем keytool -list -v -keystore truststore.jks Должен быть тип записи trustedCertEntry ▫️ Вариант 🔠 если в PEM несколько CA Часто в ca-cert.pem лежит сразу цепочка
Root + Intermediate. Лучше разрезать и импортировать по одному. 1️⃣ Разрезаем файл awk 'BEGIN{c=0} /BEGIN CERTIFICATE/{c++} {print > ("ca-" c ".pem")}' ca-cert.pem
ls -1 ca-.pem Теперь у нас несколько отдельных файлов. 2️⃣ Импортируем каждый CA for f in ca-.pem; do alias_name="$(openssl x509 -in "$f" -noout -subject | sed 's/^subject=//; s/[ ,=]/_/g')" keytool -importcert -noprompt \ -keystore truststore.jks -storetype JKS \ -alias "$alias_name" \ -file "$f"
done 3️⃣ Проверяем keytool -list -v -keystore truststore.jks В truststore должны быть только trustedCertEntry и ни одного PrivateKeyEntry. ✅ Итог keystore.jks
🔵 1 запись типа PrivateKeyEntry
🔵 alias: key
🔵 есть certificate chain truststore.jks
🔵 несколько trustedCertEntry
🔵 нет приватных ключей ❗️ Важно понимать разницу keystore содержит ключ + сертификат используется для серверной идентификации
truststore содержит только CA используется для понимания кому доверять Если кратко 🔑 keystore 〰️ кто я
🛡 truststore 〰️ кому я верю Сохраняй в закладки 〰️ такие команды вспоминаются обычно в 2 ночи перед релизом 😄 #ssl #tls #keystore #truststore #jks #java #linux #devops