Стандарт X.509 v3 определяет формат цифрового сертификата, используемого в инфраструктуре открытых ключей (PKI). Третья версия расширяет предыдущие спецификации за счёт механизма расширений (extensions), что делает её гибкой для современных криптографических систем.
Ключевое поле версии определяет структуру сертификата:
В JavaScript-библиотеке jsrsasign работа с сертификатами X.509 v3
осуществляется через объект X509, предоставляющий методы
парсинга и извлечения данных из DER/PEM представлений.
Сертификат X.509 v3 представляет собой ASN.1 структуру, закодированную в DER. Его логическая структура включает несколько обязательных блоков:
Основной контейнер данных, которые подписываются издателем сертификата.
Содержит:
Поле версии указывает на используемую спецификацию X.509.
В ASN.1 оно представлено как:
version [0] EXPLICIT Version DEFAULT v1
В jsrsasign извлечение версии осуществляется через объект:
var x = new X509();
x.readCertPEM(pemString);
console.log(x.version);
Значение:
Серийный номер — уникальный идентификатор сертификата, присваиваемый удостоверяющим центром (CA).
Характеристики:
В jsrsasign:
x.getSerialNumberHex();
Результат возвращается в шестнадцатеричном виде.
Определяет криптографический алгоритм, используемый для подписи сертификата.
Примеры:
Структура:
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
В jsrsasign:
x.getSignatureAlgorithmField();
Поле issuer содержит DN (Distinguished Name) удостоверяющего центра, подписавшего сертификат.
Типичная структура:
Пример:
CN=Example CA, O=Example Org, C=US
В jsrsasign:
x.getIssuerString();
Поле validity определяет интервал действия сертификата.
Состоит из двух элементов:
Формат времени:
Пример структуры:
Validity ::= SEQUENCE {
notBefore Time,
notAfter Time
}
В jsrsasign:
x.getNotBefore();
x.getNotAfter();
Поле subject определяет владельца сертификата.
Структура аналогична issuer:
Пример:
CN=api.example.com, O=Example Corp, C=US
В jsrsasign:
x.getSubjectString();
Один из ключевых элементов сертификата, содержащий открытый ключ субъекта.
Структура:
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING
}
Поддерживаемые алгоритмы:
В jsrsasign:
x.getPublicKey();
Возвращает объект ключа для дальнейшей криптографической работы.
Расширения являются ключевым отличием версии v3 от предыдущих.
Каждое расширение имеет:
Определяет, является ли сертификат CA.
Определяет назначение ключа:
Расширенное назначение:
Позволяет указывать дополнительные имена:
Используется для построения цепочки доверия.
Библиотека предоставляет доступ к расширениям через методы объекта
X509.
Пример:
x.getExtBasicConstraints();
x.getExtKeyUsageString();
x.getExtSubjectAltName();
Для более низкоуровневого доступа:
x.getExtInfo();
Полная структура TBSCertificate:
TBSCertificate ::= SEQUENCE {
version [0] Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
extensions [3] Extensions OPTIONAL
}
Сертификаты X.509 могут быть представлены в двух форматах:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
В jsrsasign:
x.readCertPEM(pemString);
X.509 v3 поддерживает построение цепочек доверия:
Проверка цепочки основана на:
Подпись формируется на основе TBSCertificate и закрытого ключа CA.
Процесс:
В jsrsasign проверка:
x.verifySignatureWithCert(certCA);
Структура сертификата используется в:
Расширения v3 позволяют адаптировать сертификаты под различные сценарии безопасности без изменения базового стандарта.