У меня есть это в конфигурации ActiveMQ:
<sslContext>
<sslContext keyStore="file:/home/alex/work/amq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
trustStorePassword="password"/>
</sslContext>
У меня есть пара сертификатов X.509 и файл ключей.
Как мне импортировать эти два файла, чтобы использовать их в соединителях SSL и SSL + stomp? Все примеры, которые я мог гуглить, всегда генерируют ключ сами, но у меня уже есть ключ.
я пытался
keytool -import -keystore ./broker.ks -file mycert.crt
но это только импортирует сертификат, а не файл ключа и приводит к
2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.
Я попытался объединить сертификат и ключ, но получил тот же результат.
Как мне импортировать ключ?
Ответы:
Верьте или нет, Keytool не предоставляет такие основные функции, как импорт закрытого ключа в хранилище ключей. Вы можете попробовать этот обходной путь со слиянием файла PKSC12 с закрытым ключом в хранилище ключей.
Или просто используйте более удобный KeyMan от IBM для обработки хранилища ключей вместо keytool.exe.
источник
Я использовал следующие два шага, которые я нашел в комментариях / сообщениях, связанных в других ответах:
Шаг первый: преобразовать сертификат и ключ x.509 в файл pkcs12
Примечание. Убедитесь, что вы поместили пароль в файл pkcs12 - в противном случае вы получите исключение нулевого указателя при попытке его импорта. (В случае, если у кого-то еще была эта головная боль). ( Спасибо, Джокул! )
Примечание 2: Вы можете добавить
-chain
опцию, чтобы сохранить полную цепочку сертификатов. ( Спасибо Мафуба )Шаг второй: преобразовать файл pkcs12 в хранилище ключей Java
Законченный
ДОПОЛНИТЕЛЬНО Шаг ноль: Создать самозаверяющий сертификат
Ура!
источник
-CAfile ca.crt -caname root
не выдает правильно сертификаты CA. Вместо этого я использовал-certfile concatenedCAFiles.pem
-chain
аргумент с openssl, чтобы включить полную цепочку сертификатов в файл pfx / p12, если вы хотите это в хранилище ключей.pvk2pfx
(стандартное средство VS, доступное вcmd
приглашении VS ) выдает -.pfx
эквивалент для a.p12
. совет @ jocull по-прежнему актуален; поставить пароль на него. Нетopenssl
необходимости.p12
ключ будет иметь пароль оригинального.p12.
Tomcat не удастсяjava.security.UnrecoverableKeyException: Cannot recover key
. Другими словами: если вам нужно выполнить-deststorepass changeit -srcstorepass some-password
с другими паролями, то вы должны включить-destkeypass changeit
(с тем же паролем, что и-deststorepass
)Keytool в Java 6 имеет такую возможность: импорт личных ключей в хранилище ключей Java с помощью keytool
Вот основные детали из этого поста.
Преобразуйте существующий сертификат в PKCS12, используя OpenSSL. Пароль требуется по запросу, или 2-й шаг будет жаловаться.
Преобразуйте PKCS12 в файл хранилища ключей Java.
источник
И еще один:
источник
Сначала преобразуйте в p12:
Создайте новый JKS из p12:
источник
Да, это действительно печальный факт, что keytool не имеет функции для импорта закрытого ключа.
Для справки, в конце я пошел с решением, описанным здесь
источник
В моем случае у меня был pem-файл, который содержал два сертификата и зашифрованный закрытый ключ для взаимной аутентификации SSL. Итак, мой файл pem выглядел так:
Вот что я сделал:
Разделите файл на три отдельных файла, чтобы каждый из них содержал только одну запись, начиная с «--- BEGIN ..» и заканчивая «--- END ..». Предположим, у нас теперь есть три файла: cert1.pem cert2.pem и pkey.pem
Преобразуйте pkey.pem в формат DER, используя openssl и следующий синтаксис:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
Обратите внимание, что если закрытый ключ зашифрован, вам необходимо указать пароль (получить его у поставщика исходного файла pem) для преобразования в формат DER, openssl запросит у вас пароль наподобие этого: «введите фразу-пароль для pkey .pem: "Если преобразование прошло успешно, вы получите новый файл с именем" pkey.der "
Создайте новое хранилище ключей Java и импортируйте закрытый ключ и сертификаты:
(необязательно) Проверьте содержимое вашего нового хранилища ключей:
keytool -list -keystore mykeystore -storepass password
(необязательно) Проверьте свои сертификаты и закрытый ключ из нового хранилища ключей на своем сервере SSL: (Вы можете включить отладку как параметр виртуальной машины: -Djavax.net.debug = all)
Наконец, зарегистрируйте свои сертификаты в HttpsURLConnection, если планируете использовать его:
источник
HttpsURLConnection
вместо того, чтобы пытаться писать свой собственный. (Другая проблема с вашим примером заключается в том, что вы используете то же хранилище ключей, что и хранилище ключей, и хранилище доверенных сертификатов, что не всегда является хорошей идеей ...)Использование сертификатов Let's Encrypt
Предполагая, что вы создали свои сертификаты и закрытые ключи с Let's Encrypt в
/etc/letsencrypt/live/you.com
:1. Создайте файл PKCS # 12
Это объединит ваш SSL-сертификат
fullchain.pem
и ваш закрытый ключprivkey.pem
в один файлpkcs.p12
.Вам будет предложено ввести пароль для
pkcs.p12
.В
export
параметр указывает , что файл PKCS # 12 будет создан , а не разобранные (от ручной ).2. Создайте хранилище ключей Java
Если
keystore.jks
он не существует, он будет создан сpkcs.12
файлом, созданным выше. В противном случае вы импортируетеpkcs.12
в существующее хранилище ключей.Эти инструкции взяты из этого поста в блоге .
Вот еще о различного рода файлах в
/etc/letsencrypt/live/you.com/
.источник
Основываясь на ответах выше, вот как создать новое хранилище ключей для вашего веб-сервера на основе Java из независимо созданного сертификата Comodo и закрытого ключа с помощью keytool (требуется JDK 1.6+)
Выполните эту команду и в приглашении ввода пароля введите somepass - «server.crt» - это сертификат вашего сервера, а «server.key» - это закрытый ключ, который вы использовали для выдачи CSR:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"
Затем используйте keytool для преобразования хранилища ключей p12 в хранилище ключей jks:
keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass
Затем импортируйте два других корневых / промежуточных сертификата, которые вы получили от Comodo:
Импортировать COMODORSAAddTrustCA.crt:
keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks
Импортировать COMODORSAДоменВалидацияSecureServerCA.crt:
keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks
источник
Вы можете использовать эти шаги для импорта ключа в существующее хранилище ключей. Инструкции объединены из ответов в этой теме и на других сайтах. Эти инструкции работали для меня (хранилище ключей Java):
openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root
(При необходимости установите опцию -chain. Устанавливать, что мне не удалось). При этом будет запрошен пароль - вы должны указать правильный пароль, иначе вы получите ошибку (ошибка заголовка или ошибки заполнения и т. Д.).
*.jks
файл, запустите:keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
(Очень важно - не пропускайте параметры deststorepass и destkeypass.)
источник
Предыдущие ответы правильно указывают на то, что вы можете сделать это только с помощью стандартных инструментов JDK, предварительно преобразовав файл JKS в формат PKCS # 12. Если вам интересно, я собрал компактную утилиту для импорта ключей, полученных из OpenSSL, в хранилище ключей в формате JKS без предварительной конвертации хранилища ключей в PKCS # 12: http://commandlinefanatic.com/cgi-bin/showarticle. CGI? статья = art049
Вы бы использовали связанную утилиту следующим образом:
(подпишите CSR, верните localhost.cer)
источник
Если у вас есть файл PEM (например
server.pem
), содержащий:затем вы можете импортировать сертификат и ключ в хранилище ключей JKS следующим образом:
1 ) Скопируйте закрытый ключ из файла PEM в файл ASCII (например
server.key
)2 ) Скопируйте сертификат из файла PEM в файл ASCII (например
server.crt
)3 ) Экспортируйте сертификат и ключ в файл PKCS12:
-CAfile
опции .winpty
в начало команды, чтобы можно было ввести пароль для экспорта.4 ) Преобразуйте файл PKCS12 в хранилище ключей JKS:
srcstorepass
пароль должен совпадать с паролем на экспорт , начиная с шага 3)источник
То, чего я пытался добиться, - это использовать уже предоставленный закрытый ключ и сертификат для подписи сообщения, которое отправлялось куда-то, что требовалось для того, чтобы убедиться, что сообщение исходит от меня (закрытые ключи подписываются, а открытые ключи шифруются).
Итак, если у вас уже есть файл .key и файл .crt?
Попробуй это:
Шаг 1: преобразовать ключ и сертификат в файл .p12
Шаг 2: Импортируйте ключ и создайте файл .jsk с помощью одной команды
Шаг 3: В вашей Java:
Если вам нужно подписать строку с помощью этого ключа, сделайте следующее:
Шаг 1. Преобразование текста, который вы хотите зашифровать
Шаг 2: Получить закрытый ключ в кодировке base64
Ссылки:
Финальная программа
источник
Просто создайте хранилище ключей PKCS12, Java может использовать его прямо сейчас. Фактически, если вы перечислите хранилище ключей в стиле Java, само средство keytool предупредит вас о том, что PKCS12 теперь является предпочтительным форматом.
Вы должны были получить все три файла (server.crt, server.key, ca.crt) от вашего поставщика сертификатов. Я не уверен, что на самом деле означает «-caname root», но, похоже, это нужно указывать именно так.
В коде Java обязательно укажите правильный тип хранилища ключей.
Таким образом, мой сертификат SSL, выданный comodo.com, работает нормально в NanoHTTPD.
источник
в случае эллиптической кривой и ответа на вопрос об импорте существующего сертификата x509 и закрытого ключа в хранилище ключей Java , возможно, вы захотите взглянуть и на эту тему. Как читать закрытый ключ EC в java в формате файла .pem
источник