Если у вас хорошее представление о том, что такое сертификат X509, пожалуйста, поднимите руку. Теперь, когда мы признали, что никто не поднимает руку, давайте это изменить.
Сертификаты – это сложная тема, которую часто плохо понимают. Этот учебник направлен на изменение этого путем показа вам примеров сертификатов X509, демонстрации сертификатов PKI и многого другого.
В этой статье вы получите хорошее представление о сертификатах X509. В конце вы будете понимать, как они работают на высоком уровне. Вы не станете экспертом после одной статьи, но к концу этой статьи вы, по крайней мере, станете знакомы с правильной терминологией.
Связанный материал: Управление сертификатами с помощью менеджера сертификатов Windows и PowerShell
Открытые и закрытые ключи: защита активов
Любая информация, объясняющая сертификаты X509, будет неполной без упоминания ключей. Возможно, вы уже слышали о концепции ключей, когда речь идет о терминах закрытые и открытые ключи. Но что такое ключ и как он связан с сертификатами?
Чтобы облегчить понимание, давайте объясним концепцию ключей на примере обычного замка на двери.
Когда вы покупаете новый замок на дверь, к нему прилагается ключ. Этот ключ уникален для данного замка, чтобы никто другой не смог его открыть.
Думайте о самом замке как о открытом ключе. Когда он установлен, вы, ваша семья или прохожие могут видеть замок на вашей двери. Любой может посмотреть и даже попытаться открыть его, но ему это не удастся. Чтобы открыть его, ему потребуется вставить уникальный ключ, который изначально поставляется вместе с замком. Уникальный ключ, поставляемый с замком, является закрытым ключом.
Закрытый и открытый ключи вместе называются парой ключей.
Обмен ключами
Когда дверной ключ вставляется в замок, вы можете считать это действие обменом ключами. Для того чтобы открыть дверь, закрытый ключ (дверной ключ) должен быть обменен с открытым ключом (замком).
В мире криптографии вы свободно распространяете открытый ключ и храните закрытый ключ при себе. В конце концов, вам не важно, кто видит замок, но вам точно важно, кто может его открыть (обмениться ключами).
Существует несколько различных способов обмена ключами, называемых алгоритмами обмена ключами. Алгоритмы обмена ключами направлены на получение и безопасную передачу уникального общего секрета.
Два популярных алгоритма обмена ключами, о которых вы могли слышать, – это Диффи-Хеллман (DH) и эллиптическая кривая Диффи-Хеллмана (ECDH).
Доверие к ключу
Если вам нужно, чтобы кто-то вошел через дверь, вы дадите им ключ (или копию оригинального, уникального ключа). Вы даете свой ключ только тем, кому вы доверяете. Человек, удерживающий закрытый ключ (дверной ключ), был доверен для открытия замка (открытого ключа).
Использование ключа
Использование ключа определяет назначение сертификата X509, что соответствует алгоритмам, которые будет использовать сертификат. Расширенное использование ключа (EKU) определяет предназначение открытого ключа, выходящее за пределы использования ключа.
X509-сертификаты: открытые ключи “контейнеры”
Как связаны личные и открытые ключи с понятием сертификата X509 ? Представьте сертификат просто как открытый ключ. Сертификат – это “оболочка”, которая содержит открытый ключ вместе с некоторой другой информацией о ключе, например, кто получил открытый ключ, кто подписал ключ и так далее. Сертификаты хранятся в виде файлов.
Мы рассмотрим несколько хороших примеров сертификатов X509 позже.
Вы когда-нибудь видели файл с расширением сертификата PEM или CER? Это сертификаты (открытые ключи). Вы узнаете больше о этих форматах немного позже.
Сам по себе открытый ключ не обязательно является сертификатом по определению. Это открытый ключ и связанные с ним атрибуты, объединенные вместе, определяют сертификат.
A certificate provides a standardized and secure format to communicate with specific systems along with the attributes to help validate a key pair trust. How certificates are built are defined within the X.509 standards, as you will read about later.
Отпечаток: уникальный идентификатор сертификата
Каждый сертификат X509 предназначен для идентификации одного субъекта. Сертификат должен обеспечивать уникальную идентификацию каждого открытого ключа.
A certificate thumbprint or fingerprint is a way to identify a certificate, that is shorter than the entire public key. Technically, a serial number is as well but you’ll learn about that when it comes to certification authorities (CAs). The thumbprint is a hash of a DER-encoded certificate in Windows.
Понятие идентификации большого набора данных с помощью меньшего уникального идентификатора является общей темой в компьютерной науке, известной как “отпечаток”. В блоге Моргана Симонсона подробнее рассказывается о отпечатке.
Тема: Определение важных атрибутов сертификата X509
Каждый сертификат X509 должен иметь не только уникальный идентификатор, но и отвечать на вопросы, подобные следующим. Предмет сертификата должен делать именно это.
- Кто должен использовать этот сертификат?
- Какая организация должна быть доверенной?
- Какому пользователю следует представить этот сертификат?
Предмет, пожалуй, является самой важной частью сертификата. Предмет представляет собой атрибуты, определенные стандартом X.500, которые представляют лицо или объект, на которое выдается сертификат. Он представлен в формате отличительного имени (DN).
A certificate subject is a string value that has a corresponding attribute type. For example, the DN for State or Province is st. This attribute type contains the full name of the state or province the subject resides in (e.g. ST=California).
Эти типы атрибутов и форматы значений определены рекомендациями ITU-T X.520. Дополнительная информация содержится в RFC 4519 для конкретных рекомендаций по типам атрибутов и форматам значений.
Поскольку стандарты сертификатов X509 не являются обязательными правилами, многие люди исходят из своего собственного суждения при определении предмета. Предмет должен конкретно идентифицировать конечное лицо, которому вы доверяете. Если предмет этого не отражает, как можно доверять чему-либо, используя представленный открытый ключ?
Другими словами, если вы позволяете нескольким людям использовать одно и то же имя пользователя для доступа к системе, вы не можете наказать конкретного человека за его действия. Эта практика усложняет модель доверия, с которой, как предполагается, должны соответствовать сертификаты.
Вы можете увидеть пример того, как Windows представляет сертификат X509 и, более конкретно, тему сертификата на следующем снимке экрана.

Просмотр атрибутов сертификата с помощью Cryptext.dll.
Альтернативное имя субъекта (SAN)
A SAN is a certificate extension that allows you to use one certificate for multiple subjects that’s typically identified with a Subject Key Identifier (SKI). The example below shows some of the SANs Google uses. Adding more domains to a certificate essentially tells the certificate to trust each subject to use the same private key.
A SAN can also have several types other than DNS names called GeneralNames. GeneralNames require the client reading the certificate to support SANs using GeneralNames. Most clients such as web browsers only focus on the DNS name SAN.
Вы можете увидеть SAN ниже в этом примере сертификата X509.

Некоторые из атрибутов SAN, связанных с сертификатом Google.
Понимание кодирования
Мы используем множество языков для общения друг с другом, аналогично компьютеры имеют свой собственный язык. Этот язык является двоичным, и различные методы кодирования позволяют нам сделать двоичный код более удобным для других, подобно тому, как мы переводим английский на другие языки.
Кодирование служит определенной цели. Кодирование позволяет хранить значения расширений, читаемых человеком, таким образом, чтобы компьютеры также могли использовать их. Форматы кодирования упрощают хранение и передачу сертификатов X509, но также позволяют нам читать их содержимое.
Компьютеры хорошо работают с целыми числами, а кодирование позволяет преобразовывать числовые значения в буквенно-цифровые значения или даже двоичные блобы. Это преобразование критично для работы с компьютерами, и сертификаты полагаются на кодирование для правильной передачи информации компьютерам. Форматы кодирования определяют стандарты для выполнения этих преобразований.
- ASN.1 – Стандартная абстрактная нотация синтаксической единицы является форматом сериализации для каждого из полей в сертификатах.
- ASCII – Американский стандартный код для обмена информацией (ASCII) определяет двоичное значение для каждого управляющего символа и печатного символа, используемого в большинстве читаемых человеком коммуникаций.
- Base64 – Base64 определяет схему кодирования двоичного содержимого в рамках набора символов ASCII. Это сертификаты, которые можно открыть в текстовом редакторе и увидеть “BEGIN CERTIFICATE” или другой текст ссылки.
- DER – Правила кодирования выдающихся лиц (DER) определяют другую схему кодирования специально для данных ASN.1 в виде последовательных октетов. Важным моментом с DER является то, что закодированный вывод нельзя просматривать как ASCII.
Вы можете видеть ниже разницу в схемах кодирования. Обратите внимание, что файл certificate.crt, отображаемый первым, имеет ——-BEGIN CERTIFICATE——-
, за которым следует множество случайных букв и цифр, и заканчивается ——-END CERTIFICATE——-
. Все символы читаемы человеком. Первый сертификат закодирован в Base64.
Теперь посмотрите на второй пример файла certificate.cer. Содержимое этого файла выглядит сильно отличающимся от сертификата Base64. Этот X509-сертификат закодирован в формате DER.

Разница между файлами, закодированными в Base64 и DER.
Понимание типов файлов X509 Cert.
Помните, что сертификат – это просто открытый ключ с некоторыми метаданными, представленными в виде файла. Вы найдете множество разных типов файлов, представляющих различные типы сертификатов. Каждый тип файла отличается своим расширением. Когда мы говорим о файле KEY, например, мы имеем в виду его расширение.
Ниже вы найдете все общие типы сертификатов, определенные их расширением файла, с которыми вы можете работать, и их назначением.
В приведенном ниже списке вы заметите различные ссылки на PKCS. PKCS или Public Key Cryptography Standards – это набор стандартов для определения создания различных сертификатов. Для получения более подробной информации см. эту информативную статью на Википедии.
- PFX – Это наиболее распространенные форматы в среде Windows, но они являются стандартными независимо от операционной системы. Файлы PFX содержат сертификат, открытый ключ и расширения, а также закрытый ключ, зашифрованный паролем. PFX определен стандартом PKCS #12.
- P12 – Как и PFX, P12 определен стандартом PKCS #12. Формально, PKCS #12 является преемником формата PFX, хотя оба типа файлов представляют один и тот же формат в современных криптографических реализациях.
- P7B – Контейнер сертификатов ASN.1, в котором содержатся открытые ключи для всех уровней цепочки центра сертификации, о которых вы узнаете ниже. Файл PKCS #7 предоставляет один файл для распространения нескольких открытых ключей, часто используемых для ручной настройки доверия с ЦС в частной PKI.
- P7C – Файл типа P7C выполняет ту же функцию, что и P7B, но является просто еще одним распространенным расширением для представления файла PKCS # 7.
- DER – Файл DER является DER-кодированным открытым ключом.
- CER – Открытый ключ либо DER, либо кодируется в формате Base64. Файл CER обычно кодируется в формате DER.
- CRT – Файл CRT обычно кодируется в формате Base64, но гарантий нет.
- KEY – Файл KEY часто является закодированным в формате Base64 закрытым ключом, независимо от его зашифрованности.
- PEM – Ссылка на закодированный в формате Base64 сертификат, хотя в одном PEM-файле может содержаться несколько ключей, часто предполагается, что в PEM-файле содержится закрытый ключ. Наиболее часто используется для файлов закрытых ключей PEM, закодированных в формате Base64 – зашифрованных или незашифрованных.
- CSR – Используется для представления запроса на сертификат (CSR) в ЦС (Центр сертификации) для подписи и выдачи дополнительных полей, таких как серийный номер. В большинстве случаев CSR содержит структуру ASN.1 для запроса в кодировке Base64.
- REQ – Используется в операционной системе Windows для указания настроек политики регистрации, используемых при создании запроса на сертификат.
- CRL – Файл CRL является списком сертификатов, отозванных ЦС, и содержит информацию о состоянии отзыва сертификатов и причинах их отзыва.
Инфраструктура открытых ключей (PKI): Экосистема X509-сертификатов
Вспомните ранее, когда кто-то держал ключ от дверного замка. В том случае у вас была всего одна дверь. Но что произойдет, когда вы внезапно окажетесь владельцем десятков или сотен квартир? Управление всеми этими ключами станет проблематичным!
Кроме того, жильцы не будут жить в той квартире вечно. Некоторые люди могут удержать ключ или сделать несанкционированные копии. Вам придется заменить замки, чтобы предотвратить доступ. Вы уже не доверяете бывшим жильцам.
Если вам приходится управлять сотнями квартир, в которых постоянно меняются жильцы, как вы справляетесь с этим? Ответ – это инфраструктура открытых ключей (PKI).
PKI – это целая экосистема ролей, политик и процедур, созданная для управления открытыми ключами. PKI представляет собой всеобъемлющий набор множества различных областей, связанных с распределением, использованием, управлением и удалением сертификатов X509. Это практически все, что требуется для правильной обработки и управления сертификатами в масштабе.
В следующих разделах мы разобьем на части множество наиболее распространенных компонентов PKI и объясним роль каждого из них.
Удостоверяющие центры (ЦУ): Ваши родители
A PKI is primarily built around the concept of managing trust. But since it’s not economical to directly manage hundreds or thousands of trust relationships, you need a mediator.
Вам нужна третья сторона, которая уже получила гарантии от исходной стороны. Эти третьи стороны-посредники называются удостоверяющими центрами (ЦУ), идентифицируемыми расширением идентификатора ключа удостоверяющего центра (AKI), полученного из открытого ключа, используемого для подписи данного сертификата.
Представьте себе, что вы, будучи ребенком, являетесь X509-сертификатом. Вероятно, вас учили не доверять незнакомцам ваши родители. Но что, если ваши родители (те, кому вы доверяете), представляют вас незнакомцу и говорят, что можно ему доверять? Вы, вероятно, согласитесь и будете доверять этому незнакомцу. В конце концов, если ваши родители ему доверяют, значит, и вы можете доверять ему.
A CA plays the role of your parents. You trust your parents (a CA) and they introduce you to strangers. They do so by signing the stranger’s public key to let you know that you can trust them.
Основной роль Центра сертификации (CA) – действовать в качестве доверенного посредника.
Выпуск X509-сертификатов: Установление доверия
Будучи известным доверенным субъектом, Центр сертификации (CA) обеспечивает доверие между непосредственными сторонами. Для обеспечения доверия между сторонами Центр сертификации (CA) “выдает” сертификаты. Когда мы говорим о выдаче сертификата Центром сертификации (CA), мы на самом деле имеем в виду, что Центр сертификации (CA) проверяет запрашиваемые расширения и добавляет собственные расширения, создавая сертификат.
Когда Центр сертификации (CA) выдает X509-сертификат, он использует собственный закрытый ключ для цифровой подписи открытого ключа сертификата. В процессе подписания Центр сертификации отмечает сертификат таким образом, чтобы информировать всех о том, что он доверяет этому открытому ключу. DocuSign предоставляет хороший обзор этой конкретной концепции с хорошей диаграммой.
Еще одним примером расширения, создаваемого Центром сертификации (CA), является серийный номер для каждого сертификата, и каждый серийный номер должен быть уникальным для данного Центра сертификации (CA) в соответствии с спецификациями дизайна RFC.
Пример непреднамеренного доверия в современных новостях – злонамеренное использование общедоступных сертификатов PKI с вредоносными программами. Создатели получают действительные сертификаты, которые неявно доверяются большинством систем, что затрудняет определение вредоносных бинарных файлов вашими системами как вредоносных.
Аннулирование сертификатов X509: отзыв доверия
Центр сертификации также несет ответственность за отзыв сертификатов X509, которым больше нельзя доверять. Эти отзывы публикуются ЦС в Списке отзыва сертификатов (CRL). Отзыв – это способ активного аннулирования сертификата ЦС, вместо ожидания истечения срока его действия.
Доверие является важной составляющей для работы сертификатов по их предназначению. Точки распространения помогают обеспечить доверие, предоставляя точку ссылки, откуда можно загрузить сертификат и списки отзыва, и сравнить их с используемым вами сертификатом.
A CRL Distribution Point (CDP) supplies the protocols and locations to obtain CRLs. Updating CRLs is a passive revocation validation method, with pulling updates at scheduled intervals. Online Certificate Status Protocol (OCSP) actively requests the revocation status of a specific certificate by maintaining caches of the CRLs.
Хотя проверка отзыва через CRL или OCSP доступна, ее реализацию должны поддерживать и применять клиенты, и это не всегда так.
Иерархическая структура
A PKI can be made up of multiple CAs or a single CA, these are commonly referred to as tiers.
Цепочка сертификатов X509
Как вы узнали ранее, доверие является основным аспектом при использовании сертификатов. Вовлеченные стороны должны иметь возможность доверять или проверять сертификат, выданный доверенным ЦС.
A great example of how this scales is the The United States Federal PKI public documents. These provide a great reference into maintaining an inter-organization trust relationship using CAs.
Подписание сертификатов X509
Вы часто слышите о понятии “подписи” сертификата, но что именно это означает? Как вы уже узнали, сертификаты основаны на доверии. Чтобы установить доверие, сертификат X509 подписывается удостоверяющим центром (CA). Подписание сертификата присваивает уникальный криптографический хэш сертификату, чтобы сообщить всем сторонам, которые его читают, что они могут ему доверять. Он был подписан доверенным CA.
В иерархии PKI сертификаты подписываются CA, но то, где используются эти сертификаты, зависит от того, какой тип CA их подписывает.
Если в PKI есть только один CA, то этот CA является корневым. Поскольку других CA не существует, этот CA должен сгенерировать свой собственный самоподписанный сертификат. Затем этот CA выдает сертификаты, подписанные его собственным сертификатом.
Если в PKI есть более одного CA, все CA подписываются корневым CA или промежуточным CA, который связан с корневым CA.
Обычно, когда устройство использует тот же закрытый ключ, что соответствует открытому ключу при генерации сертификата X509, это называется самоподписанным сертификатом. Однако вы также можете запросить у CA использование его собственного закрытого ключа для подписи вашего сертификата.
Алгоритмы подписи
Алгоритмы подписи сосредоточены на проверке подлинности сообщения от удаленного участника. Цифровая подпись – это сообщение, полученное из хэш-функции, зашифрованное закрытым ключом отправителя. Получатель расшифровывает цифровую подпись с помощью копии открытого ключа отправителя. Затем получатель может сравнить хэш полученного сообщения с хэшем, полученным при расшифровке цифровой подписи. Когда хэши совпадают, подлинность сообщения подтверждается.
Асимметричное шифрование – это возможность генерировать шифрованный текст без использования заранее известного секрета. Комбинация алгоритма обмена ключами с алгоритмом подписи является основой асимметричного шифрования.
Ниже приведены основные алгоритмы, используемые для цифровых подписей.
- Алгоритм Ривеста-Шамира-Адлемана (RSA)
- Цифровой алгоритм подписи (DSA)
- Алгоритм эллиптической кривой DSA (ECDSA)
Запросы на подпись сертификата (CSR)
Выпускающие ЦС используют запросы на подпись сертификата (CSR), которые позволяют клиентам представлять открытые ключи ЦС для выпуска. ЦС принимает CSR и выдает подписанные сертификаты X509 на основе настроенных политик выпуска. Это означает, что каждая доверенная ЦС также подразумевает доверие к подписанным ею открытым ключам.
Хеширование
Хеширование – это сложная тема, и я даже не буду пытаться полностью охватить ее в этом сообщении. Команда Computerphile дает хороший обзор на своем YouTube-канале. Хеширование фокусируется на преобразовании входного объекта и создании уникального вывода хеша для этого уникального ввода. Выходной хеш известен как дайджест. Это означает, что даже незначительное изменение входного объекта создаст другой уникальный и нерелевантный дайджест.
Современные реализации сфокусированы на алгоритмах безопасного хеширования SHA 2. Заметим, что SHA 256, SHA 384 и SHA 512 известны как SHA 2.
Ниже приведен список распространенных алгоритмов хеширования, с которыми вы можете столкнуться.
- SHA 256
- SHA 384
- SHA 512
- Сообщение Digest (MD) 5
Сертификатные политики
Расширение политики сертификата (CP) предоставляет ссылку на организацию, поддерживающую ЦС, документирующую их фактические политики для данной ПКИ и должно быть выровнено как Сертификатное Практическое Заявление (CPS), предоставляющее политику организации для поддержки данной ПКИ.
Точки распространения
Другой тип точки распространения, определенный в сертификатах, является Доступ к Информации Авторитета (AIA). Эти AIA предоставляют протоколы и местоположения для получения копий информации о выдающих сертификат, в большинстве случаев это означает открытый ключ выдающего ЦС.
Резюме
Надеюсь, теперь, когда вам задают вопрос, как в начале этой статьи, вы чувствуете себя более уверенно, поднимая руку, медленно. Во всей честности, надеюсь, эта статья поможет вам увидеть сложности с сертификатами X509 и с реализацией этих стандартов в Windows. Помогая вам понять некоторые основные компоненты, которые помогут вам в будущем при работе с сертификатами.
По крайней мере, теперь, когда кто-то просит открытый ключ вашего сертификата, вы можете подтвердить, что они хотят либо DER, либо Base64 кодированный, и они не будут знать, поэтому вы все равно отправите им оба.