Библиотека Jsrsasign предоставляет полноценный инструментарий для
работы с криптографией в JavaScript, включая парсинг X.509 сертификатов,
извлечение полей, проверку цепочек доверия и анализ расширений. Основной
класс для работы с сертификатами — X509.
Перед разбором важно учитывать два основных формата представления сертификатов:
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEb1...
-----END CERTIFICATE-----
Jsrsasign поддерживает оба формата, автоматически определяя тип при
загрузке через X509.
Для начала работы используется экземпляр класса
X509:
const cert = new X509();
Далее сертификат загружается в объект.
cert.readCertPEM(`
-----BEGIN CERTIFICATE-----
MIIDdzCCAl+gAwIBAgIEb1...
-----END CERTIFICATE-----
`);
cert.readCertHex("308203a...");
Сертификат X.509 включает несколько ключевых компонентов:
Jsrsasign позволяет извлекать каждый из этих элементов отдельно.
const subject = cert.getSubjectString();
Результат обычно выглядит так:
/C=US/O=Example Corp/CN=example.com
const issuer = cert.getIssuerString();
Пример:
/C=US/O=Let's Encrypt/CN=R3
Серийный номер используется для уникальной идентификации сертификата в рамках удостоверяющего центра.
const serial = cert.getSerialNumberHex();
Пример результата:
7a3f9c12ab45d901
Сертификат всегда имеет ограниченный срок жизни.
const notBefore = cert.getNotBefore();
const notAfter = cert.getNotAfter();
Формат обычно:
20240101000000Z
20250101000000Z
Определение алгоритма подписи важно для проверки доверия:
const alg = cert.getSignatureAlgorithmName();
Примеры значений:
Одной из ключевых операций является извлечение публичного ключа:
const pubKey = cert.getPublicKey();
Объект ключа можно использовать для:
Расширение SAN содержит альтернативные доменные имена:
const sans = cert.getExtSubjectAltName();
Пример результата:
DNS:example.com, DNS:www.example.com, IP:192.168.1.1
Jsrsasign позволяет проверить соответствие сертификата текущей дате:
const isValidNow = cert.isValidOn(new Date());
Расширения X.509 содержат дополнительные параметры:
Пример извлечения:
const ext = cert.getExtKeyUsageString();
Результат:
serverAuth, clientAuth
Для проверки подлинности используется метод верификации цепочки доверия:
const isVerified = cert.verifySignature(issuerPublicKey);
Где issuerPublicKey — публичный ключ центра
сертификации.
В реальных системах сертификаты редко используются изолированно. Обычно они входят в цепочку:
Jsrsasign позволяет последовательно проверять каждый уровень, передавая публичные ключи вышестоящих центров.
const cert = new X509();
cert.readCertPEM(pemString);
console.log(cert.getSubjectString());
console.log(cert.getIssuerString());
console.log(cert.getSerialNumberHex());
console.log(cert.getNotBefore());
console.log(cert.getNotAfter());
console.log(cert.getSignatureAlgorithmName());
const pubKey = cert.getPublicKey();
console.log(pubKey);
Jsrsasign работает с ASN.1 структурой сертификата. Внутренне происходит:
Это обеспечивает корректное извлечение даже сложных расширений.
При некорректном формате возможны ошибки:
Типичный подход:
try {
cert.readCertPEM(pem);
} catch (e) {
console.log("Ошибка разбора сертификата");
}
Извлечённые данные часто используются для:
Публичный ключ может быть RSA или EC:
const keyType = cert.getPublicKey().type;
Примеры:
Для глубокого анализа используется полное декодирование:
const json = cert.getParam();
Это возвращает структурированное представление всех компонентов X.509.
Некоторые сертификаты содержат:
Jsrsasign корректно обрабатывает ASN.1 UTF8String и PrintableString, обеспечивая совместимость с глобальными PKI-системами.