Что такое jks и pem файл

Обновлено: 07.07.2024

Я пытаюсь подключиться к серверу SSL, который требует от меня аутентификации. Чтобы использовать SSL через Apache MINA, мне нужен подходящий файл JKS. Однако мне дали только один .Файл PEM.

Как я могу создать файл JKS из файла PEM?

во-первых, преобразовать сертификат в формате DER:

и после, импортируйте его в хранилище ключей:

Если вы хотите импортировать сертификат в формате PEM в хранилище ключей, keytool выполнит эту работу:

в моем случае у меня был файл pem, который содержал два сертификата и зашифрованный закрытый ключ для использования при взаимной аутентификации SSL. Итак, мой файл pem выглядел так:

вот что я сделал

разделить файл на три отдельных файла, так что каждый из них содержит только одну запись, начиная с ---BEGIN.. и заканчивая ---END.. строки. Предположим, теперь у нас есть три файла: cert1.pem , cert2.pem и pkey.pem .

преобразование pkey.pem в DER форматирование с использованием openssl и следующий синтаксис:

обратите внимание, что если закрытый ключ зашифрован, вам необходимо предоставить пароль( получить его от поставщика исходного файла pem ) для преобразования в формат DER, openssl запросит пароль следующим образом: "введите пароль для pkey.pem : ".

если преобразование успешно, вы получите новый файл называется pkey.der .

создайте новое хранилище ключей java и импортируйте закрытый ключ и сертификаты:

(необязательно) проверьте содержимое нового хранилища ключей:

тип хранилища ключей: JKS Поставщик хранилища ключей: SUN

хранилище ключей содержит 3 записи:

cn=. ou=. о.=., 2 сентября 2014, trustedCertEntry, Отпечаток пальца сертификата (SHA1): 2C:B8: .

importkey, Sep 2, 2014, PrivateKeyEntry, Отпечаток пальца сертификата (SHA1): 9C:B0: .

cn=. о.=. 2 сентября 2014, trustedCertEntry, Отпечаток пальца сертификата (SHA1): 83: 63.

(необязательно) Проверьте сертификаты и закрытый ключ из нового хранилища ключей на сервере SSL: (Возможно, вы захотите включить отладку в качестве опции VM: - Djavax.сеть.debug=all)

Я всегда забываю, как это сделать, потому что это то, что я просто делаю время от времени, это одно из возможных решений, и оно просто работает:

    перейдите в свой любимый браузер и загрузите основной сертификат с защищенного веб-сайта.

выполнить две следующие строки кода:

при выполнении в среде Java SE добавьте следующие параметры:

или добавить следуя коду java:

другой вариант для шага 2-просто использовать . Ниже приведен пример с цепочкой сертификатов:

Если вам нужен простой способ загрузки файлов PEM в Java без необходимости иметь дело с внешними инструментами (opensll, keytool), вот мой код, который я использую в производстве:

существует также инструмент GUI, который позволяет создавать visual JKS и импортировать сертификаты.

Portecle является удобным приложением GUI для создания, управления и изучения хранилищ ключей, ключей, сертификатов, запросов сертификатов, списков отзыва сертификатов и многое другое.

Я получил его из интернета. Он работает довольно хорошо для PEM-файлов, содержащих несколько записей.

Чтобы вы могли без проблем пользоваться SSL-сертификатом на разных платформах и устройствах, иногда требуется изменить его формат. Дело в том, что некоторые форматы лучше подходят для работы с различными видами программного обеспечения. Далее мы расскажем о том, какие форматы бывают, в каких случаях используются и какими способами можно конвертировать один формат сертификата в другой.

Форматы сертификатов

Существует четыре основных формата сертификатов:

PEM — популярный формат используемый Центрами Сертификации для выписки SSL-сертификатов.

Основные расширения этого типа .pem, .crt, .cer, .key. В файлах содержатся строки вида

Сертификаты PEM подходят для установки на веб-серверы nginx, apache2.

DER — это бинарная форма сертификата PEM.

Основные расширения этого типа сертификата .der .cer

Сертификаты DER подходят для установки на серверы Java.

P7B. Файлы P7B кодируются в формате Base64 и имеют расширение .p7b или .p7c.

В файлах содержатся строки вида

Сертификаты P7B подходят для установки на серверы MS Windows, Java Tomcat

PFX — это сертификат в бинарном формате, выданный для домена, включающий в себя сертификат, цепочку сертификатов (корневые сертификаты) и приватный ключ. Имеют расширение .pfx или .p12.

Сертификаты PFX подходят для установки на серверы Windows, в частности Internet Information Services(IIS).

Способы конвертации

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

Конвертация SSl сертификатов посредством OpenSSL

OpenSSL — это надежный, коммерческий и полнофункциональный инструментарий для протоколов Transport Layer Security (TLS) и Secure Sockets Layer (SSL). А также библиотека криптографии общего назначения. Конвертация с использованием библиотеки OpenSSL считается одним из самых безопасных способов: все данные будет сохранены непосредственно на устройстве, на котором будут выполняться операции по конвертированию.

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

Предоставленные ниже примеры команд OpenSSL позволяют конвертировать сертификаты и ключи в нужный формат.

Конвертировать PEM в DER можно посредством команды:

Аналогично, для других типов:

PEM в P7B

PEM в PFX

Обращаем ваше внимание, что после выполнения команды, будет запрошена установка пароля ключа.

DER в PEM

P7B в PEM

P7B в PFX

PFX в PEM

Конвертация при помощи онлайн-сервисов

Этот способ считается наименее безопасным методом: никогда не знаешь, сохраняет ли автор сайта ваш приватный ключ при конвертации.

Чтобы воспользоваться этим способом, вы просто переходите по ссылке на нужный сайт, выбираете нужные вам форматы и прикрепляете файл или файлы сертификата.

Конвертация с PEM в DER

Для конвертации необходим только файл сертификата .crt, .pem


Конвертация с PEM в P7B


В этом случае существует возможность добавить также цепочку сертификатов.

Что такое цепочка сертификатов и для чего она нужна, можно узнать в статье «Что такое корневой сертификат»

Конвертация с PEM в PFX


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

Конвертация из DER в PEM


Конвертация из P7B в PEM


Конвертация из P7B в PFX


Конвертация из PFX в PEM


Конвертация скриптом openssl-ToolKit

OpenSSL ToolKit — скрипт, который облегчает работу с библиотекой OpenSSL. Работа со скриптом является безопасным решением, т.к сертификаты и ключи сертификата никуда не передаются, а используются непосредственно на вашем сервере.

Для начала работы скрипт необходимо скачать и запустить. Сделать это можно одной командой:

После выполнения команды откроется следующее окно:


Нас интересует пункт 2. Convert certificates

После перехода в пункт 2. появится следующее меню, с выбором нужного типа конвертирования


После выбора преобразования, в данном случае PEM to FPX, скрипт предложит выбрать директорию с сертификатами на том устройстве, где запускается скрипт.


В нашем случае мы их скачали в директорию /home/ivan/crt/

После корректного ввода директории, скрипт отобразит все файлы в этой директории.

Далее нужно ввести имя сертификата, который будем конвертировать, в нашем случае это site.pem


Обращаю ваше внимание, что для корректной конвертации, с PEM в PFX, необходимо вручную объединить файл сертификата, цепочки и ключа в один файл, иначе будет возникать ошибка конвертации.

Сделать это можно простой командой

Данное действие необходимо только для конвертации из PEM в PFX.

Мы рассмотрели пример конвертации PEM в PFX. Этим же путем можно конвертировать сертификаты в другие форматы. Единственное, что вам уже не понадобится шаг с объединением файлов.

После того, как вы создали сертификат, вам нужно будет загрузить его на сервера Telegram — для этого передайте его в поле certificate метода setWebhook. Это действие обязательно только для самозаверенных сертификатов. Приобретённые за деньги или полученные через certbot сертификаты никуда отправлять не нужно.

OpenSSL

Исполняемые файлы OpenSSL для Windows доступны в сети.

Исходные коды доступны на GitHub и на официальном сайте.

Генерация пары сертификатов

Необходимо использовать YOURPUBLIC.pem в качестве публичного ключа при настройки вебхука.

  • Проверить сертификат можно командой:
  • Конвертация из уже сгенерированного DER:
  • Конвертация из уже сгенерированного PKCS12:

Java keystore

С подробной документацией можно ознакомиться на сайте документации Oracle.

Генерация самозаверенного JKS

Конвертация JKS в PKCS12

Промежуточный этап перед конвертацией в PEM:

Конвертация PKCS12 в PEM

Для этой операции необходим OpenSSL:

Windows

Создание самозаверенного сертификата доступно и стандартными средствами Windows, несмотря на то, что исполняемые файлы OpenSSL для Windows доступны для скачивания.

Для настройки вебхука нужен только публичный ключ.

Создайте файл TEMPLATE.txt с таким содержанием:

Далее выполните в командной строке:

После этого будет создан и установлен самозаверенный сертификат. Для просмотра выполните:

Экспортируем в DER (промежуточный этап перед конвертацией в PEM):

Конвертация в PEM (используется для настройки вебхука):

Удаление сертификата из хранилища:

Экспорт в формат PFX(PKCS12):

С подробной документацией можно ознакомиться на сайте документации Microsoft.

Конвертировать YOURPKCS.pfx в PEM (который включает в себя приватный ключ) лучше делать с помощью OpenSSL:

В качестве графического интерфейса для экспорта публичной части сертификата в PEM можно использовать certmgr.msc.

Сайт про Telegram на русском (неофициальный).

Здесь собраны приложения на базе MTProto, переведена некоторая документация с официального сайта, а также работает Webogram.

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

Тем не менее, в моих поисках , я часто сталкиваюсь с различными форматами файлов ( .key , .csr , .pem ) , но я никогда не был в состоянии найти хорошее объяснение того , что цель каждого формата файла является.

Мне было интересно, могут ли хорошие люди здесь в ServerFault дать некоторые разъяснения по этому вопросу?

SSL существует достаточно долго, и вы думаете, что будут согласованы форматы контейнеров. И ты прав, есть. Слишком много стандартов, как это происходит. Так что это то, что я знаю, и я уверен, что другие будут вмешиваться.

  • .csr - это запрос на подпись сертификата. Некоторые приложения могут генерировать их для отправки в центры сертификации. Фактический формат - PKCS10, который определен в RFC 2986 . Он включает в себя некоторые / все ключевые детали запрашиваемого сертификата, такие как субъект, организация, состояние, еще много чего, а также открытый ключ сертификата для подписи. Они подписываются центром сертификации и возвращаются сертификаты. Возвращенный сертификат является открытым сертификатом (который включает в себя открытый ключ, но не закрытый ключ), который может быть в нескольких форматах.
  • .pem - определено в RFC с 1421 по 1424 , это формат контейнера, который может включать в себя только открытый сертификат (например, при установке Apache и файлы сертификатов CA /etc/ssl/certs ) или может включать в себя всю цепочку сертификатов, включая открытый ключ, закрытый ключ и корневые сертификаты. Смущает, что он также может кодировать CSR (например, как здесь используется ), поскольку формат PKCS10 может быть переведен в PEM. Название взято из Privacy Enhanced Mail (PEM) , неудавшегося метода для защищенной электронной почты, но используемый формат контейнера живет на нем и является переводом base64 ключей ASN.1 x509.
  • .key - это файл в формате PEM, содержащий только закрытый ключ определенного сертификата и являющийся просто условным именем, а не стандартизированным. В установках Apache это часто происходит в /etc/ssl/private . Права на эти файлы очень важны, и некоторые программы откажутся загружать эти сертификаты, если они установлены неправильно.
  • .pkcs12 .pfx .p12 - Первоначально определенный RSA в стандартах криптографии с открытым ключом (сокращенно PKCS), вариант «12» был изначально усовершенствован Microsoft и позже представлен как RFC 7292 . Это формат контейнера с паролем, который содержит как открытые, так и частные пары сертификатов. В отличие от файлов .pem, этот контейнер полностью зашифрован. Openssl может превратить это в файл .pem с открытым и закрытым ключами: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Несколько других форматов, которые появляются время от времени:

  • .der - способ кодировать синтаксис ASN.1 в двоичном формате. Файл .pem - это просто файл .der в кодировке Base64. OpenSSL может преобразовать их в .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem ). Windows видит их как файлы сертификатов. По умолчанию Windows экспортирует сертификаты как файлы в формате .DER с другим расширением. Подобно.
  • .cert .cer .crt - файл в формате .pem (или редко .der) с другим расширением, который распознается проводником Windows как сертификат, а не .pem.
  • .p7b .keystore - определен в RFC 2315 как PKCS номер 7, это формат, используемый Windows для обмена сертификатами. Java понимает их изначально и .keystore вместо этого часто использует как расширение. В отличие от сертификатов стиля .pem, этот формат имеет определенный способ включения сертификатов пути сертификации.
  • .crl - Список отзыва сертификатов. Центры сертификации производят их как способ отмены авторизации сертификатов до истечения срока их действия. Иногда вы можете загрузить их с веб-сайтов CA.

Таким образом, существует четыре различных способа представления сертификатов и их компонентов:

Читайте также: