Вопрос по pem, ssl, certificate, der, base64 – Какие существуют типы сертификатов, форматы в криптографии

8

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

Итак, я много гуглил, в основном искал концепции сертификатов, но не мог лучше прояснить мои концепции к моему удовлетворению. На самом деле это добавило больше путаницы. :)

Вот некоторые вещи, которые я почти не понимаю: 1. Что такое формат base64? Это так же, как DER? 2. Файл PEM всегда содержит содержимое base64? 3. Какой формат используется хранилищем сертификатов Windows? Это двоичный файл?

Может кто-нибудь, пожалуйста, помогите мне здесь. Был бы очень благодарен, если бы эти вещи прояснились для меня.

Ваш Ответ

1   ответ
11

ASN.1, Вот выдержка из общего определения структурысертификат X.509:

Certificate  ::=  SEQUENCE  {
    tbsCertificate       TBSCertificate,
    signatureAlgorithm   AlgorithmIdentifier,
    signatureValue       BIT STRING  }

TBSCertificate  ::=  SEQUENCE  {
    version         [0]  EXPLICIT Version DEFAULT v1,
    serialNumber         CertificateSerialNumber,
    signature            AlgorithmIdentifier,
    issuer               Name,
    validity             Validity,
    subject              Name,
    subjectPublicKeyInfo SubjectPublicKeyInfo,
    issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                         -- If present, version MUST be v2 or v3
    extensions      [3]  EXPLICIT Extensions OPTIONAL
                         -- If present, version MUST be v3
    }

Certificate значение (с заполненными содержащимися значениями) кодируется с использованиемDER формат, который является двоичным форматом.

Base64 это общий способ кодирования двоичных последовательностей в текст путем сокращения набора байтов, используемых для читаемых символов ASCII (поэтому это представление длиннее).

Сертификат в формате PEM - это Base64-кодировка DER-кодировки сертификата с возвратом строки в конце каждого 64-символьного фрагмента, расположенного между разделителями:

-----BEGIN CERTIFICATE-----
MIIB2zCCAUSgAwIBAwIBADANBgkqhkiG9w0BAQQFADAYMRYwFAYDVQQDEw1OZXRn
...
-----END CERTIFICATE-----

Вы также можете иметь закрытый ключ в формате PEM, в этом случае разделители будут-----BEGIN RSA PRIVATE KEY----- (и соответствиеEND), например.

На проводе во время соединения TLS используется DER.

На самом деле не имеет значения, что внутренне использует хранилище сертификатов Windows, оно должно иметь возможность импортировать / экспортировать сертификаты DER или PEM / Base64.

Сертификат "Типы" это более широкая тема, чем формат DER / base64. Большинство сертификатов, используемых для SSL / TLS, являются сертификатами X.509. Тогда вы получите профили использования. Наиболее распространенным являетсяInternet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile, который по существу определяет, как центры сертификации должны выдавать сертификаты и как объекты должны проверять удаленные сертификаты.

Вас также могут заинтересовать эти вопросы:

What does it mean for a digital certificate to be “signed”? What is an SSL certificate intended to prove, and how does it do it?

В целом, получение книги по PKI должно помочь.

Спасибо Бруно, это очень помогло! Теперь у меня гораздо более четкое представление. Что касается формата хранилища Windows, я использую Crypto API для получения сертификатов и, похоже, он поддерживает только двоичные форматы. Мне нужно написать свой собственный кодировщик base64 для преобразования этих сертификатов. Tushar Sudake

Похожие вопросы