Рубрики
Без рубрики

Преобразовать сертификат PFX в JKS, P12, CRT

Когда вам нужно использовать проверку подлинности клиентского сертификата из Java, проблемы начинаются даже с самого начала… С тегами java, аутентификация, сертификаты, безопасность.

Когда вам нужно использовать проверку подлинности клиентского сертификата из Java, проблемы начинаются даже с самого начала с сертификатом, поскольку обычно он работает не так, как вы хотите.

Недавно мне пришлось использовать сертификат PFX для аутентификации клиента (возможно, появится еще одно сообщение), и по этой причине мне пришлось преобразовать его в хранилище ключей Java (JKS).

Мы создадим КАК хранилище доверия, так и хранилище ключей, потому что в зависимости от ваших потребностей вам может понадобиться то или иное. Разница между truststore и keystore, если вы не знаете, заключается в следующем (цитата из руководства JSSE ref: TrustManager: Определяет, следует ли доверять учетным данным удаленной аутентификации (и, следовательно, соединению). KeyManager: Определяет, какие учетные данные для проверки подлинности следует отправлять на удаленный хост.

Хорошо, этого достаточно, вам понадобится openssl и Java 7 или новее!

Сначала давайте сгенерируем ключ из файла pfx, этот ключ позже будет использоваться для хранилища ключей p12.

openssl pkcs12 -in example.pfx -nocerts -out example.key
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying — Enter PEM pass phrase:

Как показано здесь, вам будет предложено ввести пароль для файла pfx, позже вам будет предложено ввести кодовую фразу PEM, например, использовать 123456 для всего здесь.

Вторая команда почти такая же, но на этот раз речь идет о хоккее и элт

openssl pkcs12 -in example.pfx -clcerts -nokeys -out example.crt
Enter Import Password:
MAC verified OK
Now we have a key and and a crt file

Следующий шаг – создать хранилище доверия.

keytool -import -file example.crt -alias exampleCA -keystore truststore.jks
Enter keystore password:
Re-enter new password:
Owner: CN=…..
…….
Trust this certificate? [no]: yes
Certificate was added to keystore

Как вы можете видеть здесь, вы просто импортируете этот crt-файл в jks truststore и устанавливаете некоторый пароль. На вопрос, доверяете ли вы этому сертификату, вы отвечаете утвердительно, поэтому он добавляется в хранилище доверия.

Мы закончили, если вам нужен только truststore!

Последним шагом (шагами) является создание хранилища ключей

openssl pkcs12 -export -in example.crt -inkey example.key -certfile example.crt -name "examplecert" -out keystore.p12
Enter pass phrase for example.key:
Enter Export Password:
Verifying — Enter Export Password:

Этого хранилища ключей p12 достаточно во многих случаях, тем не менее, если вам нужно хранилище ключей JKS, вам понадобится одна дополнительная команда

keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype JKS
Importing keystore keystore.p12 to keystore.jks…
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Entry for alias examplecert successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12".

Давайте проверим, что у нас есть в конце!

ls
example.pfx example.key keystore.p12
example.crt keystore.jks truststore.jks

Это все, ребята! Я надеюсь, что это кому-то поможет:)

Будет второй пост о том, как использовать это хранилище ключей для аутентификации на стороне клиента из Java.

Также как использовать truststore, если вам нужно его использовать.

Оригинал: “https://dev.to/gochev/convert-pfx-certificate-to-jks-p12-crt-cbh”