Библиотека jsrsasign реализует работу с
сертификатами стандарта X.509 через пространство имён X509,
предоставляя набор классов и утилит для парсинга, анализа и валидации
сертификатов. Основной объект — X509, который инкапсулирует
данные сертификата и предоставляет методы для извлечения его полей.
Пространство имён организовано так, чтобы разделять:
Класс X509 является центральным элементом пространства
имён. Он используется для загрузки сертификата и извлечения его
содержимого.
Создание экземпляра:
var x509 = new X509();
x509.readCertPEM(pemString);
Поддерживаются форматы:
Основные методы:
readCertPEM(pem) — загрузка сертификата в PEMreadCertHex(hex) — загрузка из hexgetSubjectString() — строковое представление
SubjectgetIssuerString() — строковое представление IssuergetNotBefore() / getNotAfter() — временные
границы действияgetSerialNumberHex() — серийный номерDN — это структура, описывающая субъект или издателя сертификата. В jsrsasign она представляется в виде строки формата:
/C=US/O=Example Corp/CN=example.com
Методы:
getSubjectString()getIssuerString()Для более детального разбора используется:
x509.getSubject();
Возвращает объект ASN.1, который можно разобрать через утилиты библиотеки.
Ключевые поля DN:
C — странаO — организацияOU — подразделениеCN — общее имяL — городST — регионРасширения содержат дополнительную информацию о сертификате. jsrsasign предоставляет методы для работы с ними.
x509.getExtInfo();
Basic Constraints
x509.getExtBasicConstraints();
Возвращает:
{ "cA": true, "pathLen": 0 }
Key Usage
x509.getExtKeyUsage();
Пример:
["digitalSignature", "keyEncipherment"]
Subject Alternative Name (SAN)
x509.getExtSubjectAltName();
Пример:
[
{ "dns": "example.com" },
{ "dns": "www.example.com" }
]
Authority Key Identifier
x509.getExtAuthorityKeyIdentifier();
Публичный ключ извлекается напрямую из сертификата:
var pubKey = x509.getPublicKey();
Типы ключей:
RSAKey)KJUR.crypto.ECDSA)Получение параметров:
pubKey.n // модуль (RSA)
pubKey.e // экспонента (RSA)
Проверка подписи выполняется с использованием публичного ключа издателя:
x509.verifySignature(pubKey);
Возвращает true или false.
Процесс включает:
tbsCertificateСертификат X.509 — это ASN.1 структура. jsrsasign предоставляет доступ к ней через hex-представление.
var hex = x509.hex;
Навигация по структуре:
ASN1HEX.getTLV(hex, index);
ASN1HEX.getV(hex, index);
Пример извлечения:
var subjectHex = x509.getSubjectHex();
Серийный номер уникально идентифицирует сертификат:
x509.getSerialNumberHex();
Для удобства:
x509.getSerialNumberHex().toUpperCase();
Определение алгоритма подписи:
x509.getSignatureAlgorithmName();
Примеры:
SHA256withRSASHA384withECDSAOID алгоритма:
x509.getSignatureAlgorithmField();
x509.getNotBefore();
x509.getNotAfter();
Проверка:
var now = new Date();
var valid = now >= new Date(x509.getNotBefore()) &&
now <= new Date(x509.getNotAfter());
Fingerprint используется для идентификации сертификата:
x509.getFingerprint();
Алгоритм по умолчанию — SHA-1, но можно указать:
x509.getFingerprint("sha256");
jsrsasign не реализует полноценную проверку CRL/OCSP, но позволяет извлекать соответствующие URL:
x509.getExtCRLDistributionPointsURI();
x509.getExtAIAInfo();
PEM → HEX:
var hex = X509.pemToHex(pem);
HEX → PEM:
var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(hex, "CERTIFICATE");
Прямой поддержки полной валидации цепочки нет, но можно реализовать вручную:
X509 тесно связан с:
KJUR.crypto — криптографияASN1HEX — разбор ASN.1KEYUTIL — работа с ключамиПример интеграции:
var key = KEYUTIL.getKey(pemPublicKey);
x509.verifySignature(key);
Основные внутренние свойства объекта:
hex — полный hex сертификатаsubjectPublicKeyRSA — публичный ключissuerHex — issuer в hexsubjectHex — subject в hexЭто позволяет гибко работать с низкоуровневой структурой.
Парсинг сертификата
var x509 = new X509();
x509.readCertPEM(pem);
console.log(x509.getSubjectString());
Проверка подписи
var caKey = KEYUTIL.getKey(caPem);
x509.verifySignature(caKey);
Извлечение SAN
var san = x509.getExtSubjectAltName();
Библиотека позволяет добавлять собственные методы для обработки специфичных расширений, используя доступ к hex-структуре и ASN.1 утилиты.
Пример:
function getCustomExtension(x509, oid) {
var ext = x509.getExtInfo(oid);
return ext ? ext.vidx : null;
}
Пространство имён X509 в jsrsasign построено по принципу:
Такой подход обеспечивает гибкость, но требует глубокого понимания структуры X.509 и ASN.1.