TLS/SSL: DER vs PEM – типы файлов и их конвертация

Автор: | 23/11/2015

ssl_logoПо сути сертификат X.509 – это цифровой документ, который был зашифрован и/или имеет цифровую подпись согласно RFC 5280.

Фактически термин сертификат X.509 как правило подразумевает сертификат IETF’s PKIX и профайл CRL стандарта X.509 v3, который описывается в RFC 5280, более широко известный как PKIX – Public Key Infrastructure (X.509).

Расширения файла X509

Первое, с чем необходимо разобраться – это чем является каждый из типов расширений, т.к. у многих возникают сложности с пониманием разницы между типами файлов DER, PEM, CRT и CER и многие говорят – что они взаимозаменяемы.

И хотя в некоторых случаях они могут заменить друг друга – правильной практикой является определить тип сертификата и задать ему верное расширение.

Кодировка (так же известна как расширение)

  • .DER – расширение .DER примеяется к двоичным файлам сертификатов. Такие файлы так же могут иметь расширение .CER или .CRT. Правильным примером использования в английском языке будет “I have a DER encoded certificate” или “I have a DER certificate“.
  • .PEM – используется для различных типов файлов X.509v3, которые содержат данные в виде ASCII (Base64), и начинаются со строки —– BEGIN.

Распространенные расширения файлов

  • .CRT – расширение для файлов сертификатов. Сам сертификат может быть бинарным файлом .DER или ASCII – .PEM. Расширения .CER и .CRT фактически являются синонимами. Наиболее часто встречаются в UNIX-системах.
  • .CER – альтернативная форма .CRT у Microsoft.
  • .KEY – это расширение используется для публичных и приватных ключей PKCS#8, которые могут храниться в бинарном .DER или ASCII .PEM формате.

.CRT и .CER могут быть взаимозаменяемы только если они имеют один формат (т.е. – CRT-ключ в формате PEM == CER-ключу в PEM формате).

Получение данных о сертификате

Для получения данных о сертификаты – можно использовать openssl, например:

# openssl x509 -in /etc/apache2/ssl/apache.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 15118644328740439277 (0xd1d036ea3c0c44ed)
    Signature Algorithm: sha256WithRSAEncryption
        ...
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                ...
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0
            X509v3 Authority Key Identifier:
                keyid:45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
    ...
-----BEGIN CERTIFICATE-----
MIICsjCCAhugAwIBAgIJANHQNuo8DETtMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV
...
3TTE1C50wQTP3d7FPRY01/zc9guxUg==
-----END CERTIFICATE-----

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

Что бы сконвертировать PEM в DER – выполните:

# openssl x509 -outform der -in /etc/apache2/ssl/apache.pem -out /etc/apache2/ssl/apache.der

Получить данные из DER-файла ключа можно так:

# openssl x509 -in /etc/apache2/ssl/apache.der -inform der -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 15118644328740439277 (0xd1d036ea3c0c44ed)
    Signature Algorithm: sha256WithRSAEncryption
        ...
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                ...
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0
            X509v3 Authority Key Identifier:
                keyid:45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
        ...
-----BEGIN CERTIFICATE-----
MIICsjCCAhugAwIBAgIJANHQNuo8DETtMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV
...
7agttGBmXpVSy0Gu0uwyz3d4Loq0Nxz/UNXf00kH6p6taTSJWtqJC8yCBvMVSuVn
3TTE1C50wQTP3d7FPRY01/zc9guxUg==
-----END CERTIFICATE-----

Ссылки по теме

https://ru.wikipedia.org/wiki/TLS

https://support.ssl.com