Центр удаленного доступа  (08.07.2020)
Конвертация различных форматов сертификатов в требуемый

Для корректного использования сертификатов в текущем сервисе требуется, чтобы сертификаты были в формате PEM (закодированными в Base64 кодировке), аналогично формату, использующемуся в Apache.

Также необходимо, чтобы сертификаты хранились каждый в своем файле, т.е.

  • Непосредственно сертификат домена
  • Приватный ключ сертификата домена
  • Сертификат(ы) центра сертификации. При этом несколько сертификатов центра сертификации (сам сертификат центра и его цепочки промежуточных сертификатов) необходимо включить в один файл, в котором они указываются последовательно, например:
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
    ...
        

Рассмотрим наиболее часто встречаемые форматы и способы конвертации каждого из них в PEM формат.

Формат PEM.

Это целевой формат, в который нужно сконвертировать свои сертификаты, в случае если они находятся в других форматах.
Данные сертификата закодированы в Base64 формате. При открытии файлов данного типа в текстовом редакторе можно увидеть строки "BEGIN CERTIFICATE" для сертификатов, и "BEGIN RSA PRIVATE KEY" или "BEGIN PRIVATE KEY" для приватных ключей.
Обычно файлы имеют раширение.pem,.crt,.cer или.key.

Формат DER.

Это бинарная форма PEM формата. При открытии файлов данного типа в текстовом редакторе, строки BEGIN и END отсутствуют.
Обычно файлы имеют расширение.der или.cer.

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

openssl x509 -inform der -in c:\cert.der -out c:\cert.pem 

Формат PKCS#7 или P7B.

Данные сертификата обычно закодированы в формате Base64, и он не может содержать приватных ключей. При открытии файлов данного типа в текстовом редакторе можно увидеть строки "BEGIN PKCS7" и "END PKCS7".
Обычно файлы имеют расширение.p7b или.p7c.

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

openssl pkcs7 -print_certs -in c:\cert.p7b -out c:\cert.pem

        После вышеуказанной конвертации в выходном файле будут находится все сертификаты - как сертификат домена, так и сертификат(ы) центра. Для их использования в текущем сервисе необходимо их разделить на отдельные файлы.

В случае затруднения в разделении на отдельные файлы, возможно, будет проще сконвертировать полученный на предыдущем шаге PEM файл и имеющийся приватный ключ (в PEM формате) в PFX формат, который затем сконвертировать в PEM формат, с разделением на отдельные файлы:

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

openssl pkcs12 -export -out c:\cert.pfx -inkey c:\cert.key.pem -in c:\cert.pem

Где:

  • c:\cert.pem - это выходной файл, полученный после конвертации из P7B в PEM, и содержащий как сертификат домена, так и сертификат(ы) центра сертификации
  • c:\cert.key.pem - это приватный ключ (в PEM формате)
  • c:\cert.pfx - это итоговый выходной PFX файл, который в дальнейшем можно конвертировать в PEM с разделением на отдельные файлы (см. пункт конвертация из PFX в PEM)

Формат PKCS#12 или PFX.

Данные представлены в бинарной форме. Это файл контейнер который содержит все сертификаты - сертификат(ы) центра сертификации, сертификат домена и его приватный ключ.
Обычно файлы имеют расширение.pfx или.p12.

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

  • Экспорт сертификата(ов) центра сертификации:
    openssl pkcs12 -export -out c:\cert.pfx -inkey c:\cert.key.pem -in c:\cert.pem
        
  • Экспорт сертификата домена:
    openssl pkcs12 -in c:\cert.pfx -out c:\cert.pem -nodes -nokeys -clcerts
        
  • Экспорт приватного ключа:
    openssl pkcs12 -in c:\cert.pfx -out c:\cert.key.pem -nodes -nocerts
        

Назначение, удаление или изменение пароля приватного ключа :

openssl rsa -des3 -in c:\old_cert.key.pem -out c:\new_cert.key.pem -passin pass:old_password -passout pass:new_password

Для удаления пароля не указывайте параметр passout. В случае если исходный файл без пароля, то не указывайте параметр passin.