KJUR.asn1.x509 — пространство имён библиотеки jsrsasign, предназначенное для работы с X.509 сертификатами, их разбором, созданием и сериализацией ASN.1 структур. Оно охватывает как низкоуровневые ASN.1 представления (TBS, Extensions, AlgorithmIdentifier), так и высокоуровневые утилиты для чтения и генерации сертификатов.
Модуль построен вокруг трёх уровней абстракции:
Парсинг сертификатов (read-only слой) Разбор PEM/DER X.509 сертификатов и извлечение полей.
ASN.1 моделирование (структурный слой) Представление TBSCertificate, X500Name, Extensions и связанных структур.
Генерация сертификатов (write/build слой) Построение и подпись новых X.509 сертификатов.
Основные классы:
KJUR.asn1.x509.X509KJUR.asn1.x509.TBSCertificateKJUR.asn1.x509.X509UtilKJUR.asn1.x509.X509CRL (в некоторых версиях)AlgorithmIdentifier,
GeneralName, ExtensionКлючевой класс для работы с существующими сертификатами. Используется для разбора PEM/DER и извлечения данных.
var x = new KJUR.asn1.x509.X509();
x.readCertPEM(pemString);
Или загрузка из HEX:
x.readCertHex(hexString);
Возвращает серийный номер сертификата в hex-формате.
String0xВозвращает имя издателя сертификата (Issuer).
getIssuerString() — строковое представление DNgetIssuerHex() — ASN.1 DER в hexПример:
"C=US, O=Let's Encrypt, CN=R3"
Извлекает Subject Distinguished Name.
Используется для идентификации владельца сертификата.
Возвращают сроки действия сертификата:
getNotBefore() — начало действияgetNotAfter() — окончание действияФормат: строка времени ASN.1 UTCTime или GeneralizedTime.
Извлекает публичный ключ из сертификата.
Возвращаемый объект зависит от алгоритма:
Возвращает подпись сертификата в hex.
Возвращает алгоритм подписи:
SHA256withRSASHA384withECDSASHA1withRSA (устаревший)Комплексный метод для получения человеко-читаемого отчёта о сертификате:
Используется для отладки и анализа сертификатов.
Парсинг DER сертификата в hex-формате.
TBSCertificate (To Be Signed Certificate) — ядро X.509 структуры. Этот класс используется при создании новых сертификатов.
var tbsc = new KJUR.asn1.x509.TBSCertificate();
Устанавливает серийный номер сертификата.
tbsc.setSerialNumber("01A3FF");
Определяет алгоритм подписи:
tbsc.setSignatureAlgByParam({
name: "SHA256withRSA"
});
Устанавливает Issuer DN:
tbsc.setIssuerByParam({
str: "/C=US/O=Example/CN=CA Root"
});
Устанавливает Subject DN:
tbsc.setSubjectByParam({
str: "/C=RU/O=Test/CN=example.com"
});
tbsc.setNotBefore("230101000000Z");
tbsc.setNotAfter("240101000000Z");
Установка публичного ключа субъекта:
tbsc.setSubjectPublicKeyInfo(rsaKey);
Добавление X.509 расширений:
tbsc.appendExtension(
new KJUR.asn1.x509.BasicConstraints({cA: true})
);
Утилитарный класс для операций над сертификатами.
Генерация нового сертификата в PEM формате.
KJUR.asn1.x509.X509Util.newCertPEM(param);
Параметры включают:
Возвращает структурированную информацию о сертификате.
Анализ списка отозванных сертификатов (CRL).
Извлечение base64 содержимого PEM.
Расширения реализованы как отдельные ASN.1 классы.
Поддерживает DNS, IP, URI:
new KJUR.asn1.x509.SubjectAltName({
array: [
{ dns: "example.com" },
{ ip: "192.168.1.1" }
]
});
Определяет тип сертификата:
new KJUR.asn1.x509.BasicConstraints({
cA: true,
pathLen: 2
});
Указывает назначение ключа:
new KJUR.asn1.x509.KeyUsage({
critical: true,
bin: "11" // digitalSignature + keyEncipherment
});
Расширенное использование ключа:
Структура X.509 в KJUR.asn1.x509 строго следует ASN.1 модели:
Certificate
TBSCertificate
signatureAlgorithm
signatureValue
Процесс создания сертификата:
Пример:
var cert = KJUR.asn1.x509.X509Util.newCertPEM({
serial: { hex: "01" },
sigalg: "SHA256withRSA",
issuer: { str: "/C=US/O=CA/CN=Root" },
subject: { str: "/C=US/O=Org/CN=Site" },
sbjpubkey: pubKey,
notbefore: "240101000000Z",
notafter: "250101000000Z",
ext: [
{ basicConstraints: { cA: false } }
],
cakey: privateKey
});
KJUR.asn1.x509 позволяет анализировать цепочки:
Основной метод — ручная проверка через getIssuerString()
и getSubjectString().
В некоторых версиях реализован X509CRL:
Используются вспомогательные структуры:
KJUR.asn1.x509.AlgorithmIdentifierKJUR.asn1.x509.TimeKJUR.asn1.x509.X500NameKJUR.asn1.x509.ExtensionКаждый класс соответствует RFC 5280.