KJUR.asn1.x509: классы и методы

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.X509
  • KJUR.asn1.x509.TBSCertificate
  • KJUR.asn1.x509.X509Util
  • KJUR.asn1.x509.X509CRL (в некоторых версиях)
  • вспомогательные ASN.1 структуры: AlgorithmIdentifier, GeneralName, Extension

Класс KJUR.asn1.x509.X509

Ключевой класс для работы с существующими сертификатами. Используется для разбора PEM/DER и извлечения данных.

Инициализация

var x = new KJUR.asn1.x509.X509();
x.readCertPEM(pemString);

Или загрузка из HEX:

x.readCertHex(hexString);

Основные методы

getSerialNumberHex()

Возвращает серийный номер сертификата в hex-формате.

  • Тип: String
  • Формат: без префикса 0x

getIssuerHex() / getIssuerString()

Возвращает имя издателя сертификата (Issuer).

  • getIssuerString() — строковое представление DN
  • getIssuerHex() — ASN.1 DER в hex

Пример:

"C=US, O=Let's Encrypt, CN=R3"

getSubjectString()

Извлекает Subject Distinguished Name.

Используется для идентификации владельца сертификата.


getNotBefore() / getNotAfter()

Возвращают сроки действия сертификата:

  • getNotBefore() — начало действия
  • getNotAfter() — окончание действия

Формат: строка времени ASN.1 UTCTime или GeneralizedTime.


getPublicKey()

Извлекает публичный ключ из сертификата.

Возвращаемый объект зависит от алгоритма:

  • RSAKey для RSA
  • KJUR.crypto.ECDSA для EC

getSignatureHex()

Возвращает подпись сертификата в hex.


getSignatureAlgName()

Возвращает алгоритм подписи:

  • SHA256withRSA
  • SHA384withECDSA
  • SHA1withRSA (устаревший)

getInfo()

Комплексный метод для получения человеко-читаемого отчёта о сертификате:

  • Subject
  • Issuer
  • Serial Number
  • Validity
  • Public Key Info
  • Extensions

Используется для отладки и анализа сертификатов.


parseCertHex(hex)

Парсинг DER сертификата в hex-формате.


Класс KJUR.asn1.x509.TBSCertificate

TBSCertificate (To Be Signed Certificate) — ядро X.509 структуры. Этот класс используется при создании новых сертификатов.

Создание объекта

var tbsc = new KJUR.asn1.x509.TBSCertificate();

Основные методы

setSerialNumber(hex)

Устанавливает серийный номер сертификата.

tbsc.setSerialNumber("01A3FF");

setSignatureAlgByParam(param)

Определяет алгоритм подписи:

tbsc.setSignatureAlgByParam({
  name: "SHA256withRSA"
});

setIssuerByParam(param)

Устанавливает Issuer DN:

tbsc.setIssuerByParam({
  str: "/C=US/O=Example/CN=CA Root"
});

setSubjectByParam(param)

Устанавливает Subject DN:

tbsc.setSubjectByParam({
  str: "/C=RU/O=Test/CN=example.com"
});

setNotBefore / setNotAfter

tbsc.setNotBefore("230101000000Z");
tbsc.setNotAfter("240101000000Z");

setSubjectPublicKeyInfo(key)

Установка публичного ключа субъекта:

tbsc.setSubjectPublicKeyInfo(rsaKey);

appendExtension(ext)

Добавление X.509 расширений:

tbsc.appendExtension(
  new KJUR.asn1.x509.BasicConstraints({cA: true})
);

Класс KJUR.asn1.x509.X509Util

Утилитарный класс для операций над сертификатами.

Основные функции

newCertPEM()

Генерация нового сертификата в PEM формате.

KJUR.asn1.x509.X509Util.newCertPEM(param);

Параметры включают:

  • subject
  • issuer
  • public key
  • validity period
  • signature algorithm
  • private key для подписи

getInfo(certPEM)

Возвращает структурированную информацию о сертификате.


getCRLInfo(crlPEM)

Анализ списка отозванных сертификатов (CRL).


getPEMContent(pem)

Извлечение base64 содержимого PEM.


Работа с расширениями X.509

Расширения реализованы как отдельные ASN.1 классы.

SubjectAltName

Поддерживает DNS, IP, URI:

new KJUR.asn1.x509.SubjectAltName({
  array: [
    { dns: "example.com" },
    { ip: "192.168.1.1" }
  ]
});

BasicConstraints

Определяет тип сертификата:

new KJUR.asn1.x509.BasicConstraints({
  cA: true,
  pathLen: 2
});

KeyUsage

Указывает назначение ключа:

new KJUR.asn1.x509.KeyUsage({
  critical: true,
  bin: "11" // digitalSignature + keyEncipherment
});

ExtKeyUsage

Расширенное использование ключа:

  • serverAuth
  • clientAuth
  • codeSigning
  • emailProtection

ASN.1 представление сертификата

Структура X.509 в KJUR.asn1.x509 строго следует ASN.1 модели:

  • Certificate

    • TBSCertificate

      • version
      • serialNumber
      • signature
      • issuer
      • validity
      • subject
      • subjectPublicKeyInfo
      • extensions
    • signatureAlgorithm

    • signatureValue


Подпись и генерация сертификатов

Процесс создания сертификата:

  1. Создание TBSCertificate
  2. Формирование ASN.1 структуры
  3. Подписание приватным ключом
  4. Объединение в Certificate

Пример:

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 позволяет анализировать цепочки:

  • проверка Issuer → Subject связей
  • анализ промежуточных CA
  • извлечение корневого сертификата

Основной метод — ручная проверка через getIssuerString() и getSubjectString().


Работа с CRL (Certificate Revocation List)

В некоторых версиях реализован X509CRL:

  • парсинг CRL
  • получение revoked certificates
  • проверка серийных номеров

Внутренние ASN.1 классы

Используются вспомогательные структуры:

  • KJUR.asn1.x509.AlgorithmIdentifier
  • KJUR.asn1.x509.Time
  • KJUR.asn1.x509.X500Name
  • KJUR.asn1.x509.Extension

Каждый класс соответствует RFC 5280.


Особенности реализации jsrsasign

  • Полностью JavaScript-реализация ASN.1 без нативных зависимостей
  • Поддержка PEM и DER форматов
  • Совместимость с RSA и ECDSA
  • Возможность генерации самоподписанных сертификатов
  • Минимальная зависимость от WebCrypto API

Типичные сценарии использования

  • анализ TLS сертификатов
  • генерация self-signed сертификатов
  • построение CA инфраструктуры
  • проверка цепочек доверия
  • извлечение публичных ключей
  • обработка X.509 расширений