Вы здесь

Формат сертификатов

Формальное описание структур данных

Стандарт X.509 предполагает, что все структуры данных, связанные с сертификатами описываются в формате ASN.1. ASN.1 - это архитектурно-независимое представление данных, пригодное для хранения произвольных иерархических структур. На практике, структура ASN.1 кодируется в двоичное представление DER (Distinguished Encoding Rules), описанное в X.690.

Все объектов в ASN.1 имеют уникальные идентификаторы OID (Object Identifier), для которых определены базовые типы данных (числа, строки, коллекции и т.п). OID - это последовательность положительных целых чисел, однозначно идентифицирующая объект. В текстовой записи OID выглядит как десятичные числа, разделяемые точкой - 1.2.345.6.79. Структура OID описывает дерево, корень которого расположен в начале записи. При записи в человекочитаемой форме корневой OID заменяют на некую мнемоническую строку, которую продолжают числовой последовательностью. Например корневой OID ветки, описывающей объекты алгоритма RSA, выглядит так: 1.2.840.113549.1. На специализированном сайте можно выяснить, что это: {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)}. Российский сегмент OID {iso(1) member-body(2) ru(643)} по соглашению с Росстандартом обслуживает ОАО "Инфотекс Интернет Траст". Объекты, связанные с российской криптографией, находятся в ветке 1.2.643.100 и описаны в Приказе ФСБ РФ от 27 декабря 2011 г. N 795 "Об утверждении Требований к форме квалифицированного сертификата ключа проверки электронной подписи".

Для обеспечения уникальности, те или иные OIDы регистрируются некими официальными организациями при координации ISO и ITU. К таким регистрирующим организациям относится IANA, которая выделяет OIDы, необходимые для протоколов сети Интернет (например, LDAP и SNMP). Частная организация может получить стартовый OID, и строить от него поддерево для внутреннего использования. В России регистрацией частных OID занимается ОАО "Инфотекс Интернет Траст".

Просмотр ASN.1 структуры ключа:

openssl asn1parse -in x509-key.pem

Типы сертификатов

  • RFC 5280 описывает формат сертификата X.509 (расширение файла .crt,.cer, .der, .pem) и списка отозванных сертификатов (.clr)

Кроме того, серия документов Public-Key Cryptography Standards (PKCS), созданная корпорацией RSA, описывает различные типы сертификатов X.509. Документы имеют порядковую нумерацию, записанную через #.

  • PKCS #1 (RFC 8017) описывает алгоритм RSA и формат его ключей
  • PKCS #7 (RFC 2315) описывает формат криптографического сообщения (зашифрованного и/или подписанного) (.p7b)
  • PKCS #8 (RFC 5208) описывает формат приватного ключа (.key)
  • PKCS #10 (RFC 2986 ) описывает формат запроса на сертификат (.csr)
  • PKCS #12 (RFC 7292) формат экспорта секретного ключа который вместе с сертификатом и путём сертификации ( .pfx или .p12).

Форматы хранения сертификатов

Основной формат хранения сертификатов X.509 - DER, однако для удобства пересылки по электронной почте его часто дополнительно кодируют в формат PEM (Privacy Enhanced Mail RFC 1421). PEM сам по себе довольно большой стандарт, но из взято только кодирование по алгоритму Base64 и обрамление полученного текста границами:

-----BEGIN label -----
-----END label -----

Для секретных ключей RSA (PKCS#1) используется традиционная форма label, похоже, не описанная в стандартах - RSA PRIVATE KEY.

RFC 7468 описывает форматы label для разных типов ключей и сертификатов

  • CERTIFICATE - сертификат X.509
  • PUBLIC KEY - публичный ключ X.509
  • X509 CRL - список отозванных сертификатов
  • PKCS7 - PKCS#7
  • PRIVATE KEY - PKCS#8
  • ENCRYPTED PRIVATE KEY - RFC 5958
  • CERTIFICATE REQUEST - PKCS#10

За пределами границ BEGIN и END в файл с сертификатом может быть добавлена человекочитаемая версия данных.

Конвертация форматов

Вывод в человекочитаемом формате. noout - отключение вывода в формате PEM:

openssl x509 -in certificate.cer -noout -text

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

openssl x509 -inform pem -in certificate.pem -outform der -out certificate.cer
openssl x509 -inform der -in certificate.cer -outform pem -out certificate.pem

Создание файла PFX:

openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.crt -certfile CA.crt

Извлечение приватного ключа RSA из PKCS#8:

openssl pkcs8 -nocrypt -in pkcs8.pem -out pkcs1.pem

CA Bundle

CA Bundle - связка CA - это не особый формат, а просто набор открытых ключей (сертификатов) доверенных центров сертификации в формате PEM, склеенных в один текстовый файл. Формат придуман фирмой Netscape. В Linux CentOS 7 файл /etc/pki/tls/certs/ca-bundle.crt ставится с пакетом ca-certificates-2018.2.22-70. Создать CA Bundle из отдельных файлов можно стандартными средствами ОС:

cat *.pem > ca_bundle.crt

Ссылки

Статья про кроссплатформенное средство просмотра сертификатов

Яндекс.Метрика