D
DevOps в тапках
@devopsintapki52 подп.
56просмотров
26 февраля 2026 г.
Score: 62
Привет! 👋 Сегодня поговорим о том как извлечь сертификат, приватный ключ, цепочку CA из .jks Иногда нужно из keystore.jks извлечь 🔵 приватный ключ 🔵 сертификат (leaf) 🔵 всю цепочку Зачем 〰️ вопрос риторический. Миграция на nginx, перенос в Kubernetes secret, отладка mTLS, перенос на другой сервер 〰️ сценариев масса. 😎 ❗️ Но есть нюанс ➡️ keytool не умеет напрямую вытаскивать приватный ключ. Поэтому делаем это через промежуточный формат PKCS12. ✅ Вначале нужно узанть alias записи с ключом в keystore keytool -list -v -keystore keystore.jks Терминал попросит ввести пароль. Вводим если знаем 😄 Ищем глазками Alias name: имя_алиаса Entry type: PrivateKeyEntry ❓ Зачем вообще нужен alias В одном .jks может храниться 🔵 несколько сертификатов 🔵 несколько ключей 🔵 разные записи trustedCertEntry/PrivateKeyEntry Alias 〰️ это имя конкретной записи внутри. Когда мы конвертируем или экспортируем данные, нужно точно указать, какую именно запись с ключом мы хотим извлечь. Без указания alias 🔵 можно экспортировать не ту запись 🔵 можно получить ошибку 🔵 можно случайно взять только trustedCertEntry без ключа ✅ Конвертируем JKS ➡️ PKCS12 keytool -importkeystore \ -srckeystore keystore.jks -srcstoretype JKS \ -destkeystore temp.p12 -deststoretype PKCS12 \ -srcalias имя_алиаса Терминал попросит 🔵 Пароль источника keystore.jks 🔵 Пароль для нового temp.p12 🔵 Подтверждение нового пароля 🔵 Если у ключа был отдельный keypass, может запросить и его. Теперь у нас есть temp.p12 〰️ с ним уже удобно работать через openssl. ✅ Извлекаем только leaf-сертификат openssl pkcs12 -in temp.p12 -clcerts -nokeys -out cert.crt Терминал попросит ввести пароль уже от temp.p12 ✅ Извлекаем всю цепочку openssl pkcs12 -in temp.p12 -nokeys -out fullchain.pem ✅ Извлекаем приватный ключ openssl pkcs12 -in temp.p12 -nocerts -nodes -out private.key 🔵 Если хотим ключ без пароля 〰️ -nodes обязателен 🔵 Если нужен зашифрованный ключ 〰️ убираем -nodes ✅ Проверяем, что ключ и сертификат совпадают openssl x509 -noout -modulus -in cert.crt | openssl md5 openssl rsa -noout -modulus -in private.key | openssl md5 Хэши должны совпасть. ⚠️ Можно передать пароль прямо в команды, но с этим стоит быть осторожным 〰️ пароль попадёт в history 😏 ✅ В итоге получаем 🔵 cert.crt 〰️ твой сертификат 🔵 fullchain.pem 〰️ сертификат + CA 🔵 private.key 〰️ приватный ключ Из truststore - цепочка CA (intermediate + root) извлекается проще, чем из keystore. ❓Почему Потому что в truststore нет приватных ключей, там только trustedCertEntry. ✅ Посмотрим, что лежит в truststore keytool -list -v -keystore truststore.jks ➡️ Увидим что-то вроде Alias name: intermediate Entry type: trustedCertEntry Alias name: root Entry type: trustedCertEntry ✅ Извлекаем конкретный CA сертификат intermediate keytool -exportcert \ -keystore truststore.jks \ -alias intermediate \ -rfc \ -file intermediate.pem ✅ Извлекаем Root CA keytool -exportcert \ -keystore truststore.jks \ -alias root \ -rfc \ -file root.pem Флаг -rfc делает PEM-формат (-----BEGIN CERTIFICATE-----). ✅ Извлечь все CA сразу Если alias’ов несколько for alias in $(keytool -list -keystore truststore.jks | grep trustedCertEntry | awk '{print $1}'); do keytool -exportcert -rfc \ -keystore truststore.jks \ -alias "$alias" \ -file "$alias.pem" done ✅ И помни 😉 Keystore 〰️ твоя личность. Truststore 〰️ твой круг доверия. mTLS 〰️ когда доверие взаимное 💞 #ssl #tls #keystore #truststore #jks #java #linux #devops
56
просмотров
3596
символов
Да
эмодзи
Нет
медиа

Другие посты @devopsintapki

Все посты канала →
Привет! 👋 Сегодня поговорим о том как извлечь сертификат, п — @devopsintapki | PostSniper