Каковы различия между.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!
- создайте закрытый ключ и самозаверяющий сертификат, заполните такие поля, как: фраза-пароль для вашего закрытого ключа и поля для вашего сертификата
//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-----
- подпишите 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
...
- Подтвердить подпись
//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
...