Каковы различия между.pem, .cer и.der?

Каковы различия между .pem, .cer а также .der?

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

2 ответа

Решение

.pem, .cer а также .der все расширения файлов для файлов, которые обычно содержат сертификат X.509 v3.

DER - это метод кодирования данных, составляющих сертификат. Сам DER может представлять любые данные, но обычно он описывает закодированный сертификат или контейнер CMS. Структура сертификата описывается с использованием языка представления данных ASN.1. BER и DER - это двоичные методы кодирования данных, описанные в ASN.1.

PEM - это метод кодирования двоичных данных в виде строки (ASCII-броня). Он содержит верхний и нижний колонтитулы (с указанием типа данных, которые кодируются и показывает начало / конец, если данные объединены в цепочку), а данные в середине - это базовые данные. В случае, если он кодирует сертификат, он просто будет содержать кодировку base 64 сертификата DER. PEM расшифровывается как Privacy Enhanced Mail; mail не может содержать незашифрованные двоичные значения, такие как DER напрямую.

.cer просто стоит за сертификатом. Обычно это данные в кодировке DER, но Windows также может принимать данные в кодировке PEM. Вы должны взглянуть на содержание (например, используя file утилита в системах posix), чтобы увидеть, что находится внутри файла, чтобы быть на 100% уверенным.


Чтобы использовать открытый ключ, содержащийся в сертификате (и подписанный подписью в сертификате), следует использовать любую библиотеку, которая анализирует сертификаты X.509 и выполняет шифрование RSA. Вы можете использовать инструмент, который обнаруживает / обрабатывает кодировку PEM, или вы можете сначала преобразовать сертификат в DER, удалив кодировку PEM.

АСН.1, ДЕР, ПЭМ

Расширение файла не имеет значения

      ASN.1 <-> DER <-> PEM
  • Abstract Syntax Notation One ( ASN.1 ) - это язык описания интерфейса (IDL) для описания структур данных. Широко используется в телекоммуникациях, сетях, криптографии

  • Выдающиеся правила кодирования ( DER ) — двоичные. который является одним из основных форматов кодирования для ASN.1. Это подмножество основных правил кодирования (BER). широко используется в криптографии. .der, .cer можно использовать

  • Почта с повышенной конфиденциальностью (PEM) — DER в кодировке base64 . Блок или блоки (например, цепочка сертификатов) base-64 с текстовыми заголовками и нижними колонтитулами для обозначения начала и конца. Основное назначение используется для криптографии. Трудно передать двоичный файл DER, например почту, которая поддерживает ASCII. Вы можете обнаружить, что существует множество расширений файлов с PEM внутри, таких как .pem, .crt, .cer .key (для открытых или закрытых ключей), но вам не следует полагаться на это. Вы должны открыть этот файл и проверить верхний/нижний колонтитул

      -----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
  • Стандарты криптографии с открытым ключом № 7: Синтаксис криптографических сообщений ( PKCS № 7: CMS ). Он может храниться как DER или PAM. Это универсальный формат для зашифрованных данных, аутентифицированных данных или подписанных данных (кроме закрытых ключей)... Он может содержать прикрепленную или отдельную подпись с цепочкой сертификатов. .p7b - обычно PEM, .p7s - файл подписи в формате DER

  • Стандарты криптографии с открытым ключом № 12: Синтаксис криптографических сообщений ( PKCS № 12: CMS ) такой же, как PKCS № 7, но содержит закрытый ключ.

PKCS #7 в формате PEM

      -----BEGIN PKCS7-----
...
-----END PKCS7-----

Пример отдельной подписи PKCS#7

данные.txt:

      Hello, World!
  1. создайте закрытый ключ и самозаверяющий сертификат, заполните такие поля, как: фраза-пароль для вашего закрытого ключа и поля для вашего сертификата
      //openssl req -x509 -newkey rsa:4096 -keyout <name_for_new_private_key> -out <name_for_new_certificate> -days 365
openssl req -x509 -newkey rsa:4096 -keyout myPrivateKey -out myCert -days 365

myPrivateKey имеет формат PEM:

      -----BEGIN ENCRYPTED PRIVATE KEY-----
MIIJnzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQI9Qxgmq0oK+ICAggA
...
-----END ENCRYPTED PRIVATE KEY-----

myCert имеет формат PEM:

      -----BEGIN CERTIFICATE-----
MIIFMjCCAxoCCQD3+UllOGhfkTANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJV
...
-----END CERTIFICATE-----
  1. подпишите data.txt, используя фразу для вашего закрытого ключа
      //openssl cms -sign -signer <cert_file> -inkey <private_key_file> -binary -in <data_file> -outform [DER, PEM] -out <name_for_new_signature>

генерация подписи данных в формате PEM

      openssl cms -sign -signer myCert -inkey myPrivateKey -binary -in data.txt -outform PEM -out dataSignature
      -----BEGIN CMS-----
MIII/gYJKoZIhvcNAQcCoIII7zCCCOsCAQExDTALBglghkgBZQMEAgEwCwYJKoZI
...
-----END CMS-----

генерация подписи данных в формате DER

      openssl cms -sign -signer myCert -inkey myPrivateKey -binary -in data.txt -outform DER -out dataSignature
      3082 08fe 0609 2a86 4886 f70d 0107 02a0
...
  1. Подтвердить подпись
      //openssl cms -verify -binary -inform <PEM_or_DER_format_of_signature> -in <signature_file> -content <data_file> -noverify > /dev/null

//let's say that we generated signature in PEM format on previous step
openssl cms -verify -binary -inform PEM -in dataSignature -content data.txt -noverify > /dev/null

//Verification successful

//-noverify - Do not verify the signers certificate of a signed message
//-nointern - By default searching signing certificate inside. With this option only the certificates specified in the -certfile option are used.

Вы можете просмотреть PKCS7

      //openssl cms -cmsout -in <signature_file> -inform [PEM, DER] -noout -print
openssl cms -cmsout -in dataSignature -inform PEM -noout -print
      CMS_ContentInfo: 
  contentType: pkcs7-signedData (1.2.840.113549.1.7.2)
  d.signedData: 
    version: 1
    digestAlgorithms:
        algorithm: sha256 (2.16.840.1.101.3.4.2.1)
        parameter: <ABSENT>
    encapContentInfo: 
      eContentType: pkcs7-data (1.2.840.113549.1.7.1)
      eContent: <ABSENT>
    certificates:
      d.certificate: 
        cert_info: 
          version: <ABSENT>
          serialNumber: 17868393695656042385
...

ASN.1 выглядит или использует lapo.it

      //openssl asn1parse -inform [PEM, DER] -i -in <(fold -w 64 <signature_file>)
openssl asn1parse -inform PEM -i -in dataSignature

//for PEM sometimes helps next command: openssl asn1parse -i -in dataSignature <(fold -w 64 dataSignature)
        0:d=0  hl=4 l=2302 cons: SEQUENCE          
    4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
   15:d=1  hl=4 l=2287 cons:  cont [ 0 ]        
   19:d=2  hl=4 l=2283 cons:   SEQUENCE          
   23:d=3  hl=2 l=   1 prim:    INTEGER           :01
   26:d=3  hl=2 l=  13 cons:    SET               
   28:d=4  hl=2 l=  11 cons:     SEQUENCE          
   30:d=5  hl=2 l=   9 prim:      OBJECT            :sha256
   41:d=3  hl=2 l=  11 cons:    SEQUENCE          
   43:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
   54:d=3  hl=4 l=1334 cons:    cont [ 0 ]        
   58:d=4  hl=4 l=1330 cons:     SEQUENCE          
   62:d=5  hl=4 l= 794 cons:      SEQUENCE          
   66:d=6  hl=2 l=   9 prim:       INTEGER           :F7F9496538685F91
   77:d=6  hl=2 l=  13 cons:       SEQUENCE          
   79:d=7  hl=2 l=   9 prim:        OBJECT            :sha256WithRSAEncryption
...

[Подпись, Сертификат]

Другие вопросы по тегам