X509.readCertPEM и X509.readCertHex

Методы X509.readCertPEM и X509.readCertHex в jsrsasign используются для разбора X.509 сертификатов из различных представлений — PEM и HEX. Оба метода относятся к низкоуровневому парсингу сертификатов и служат точкой входа в структуру X509, позволяя получить доступ к полям сертификата после его декодирования.


X.509 сертификаты в практике встречаются в нескольких текстовых и бинарных представлениях. Два наиболее распространённых формата:

PEM (Privacy-Enhanced Mail) Текстовый формат, закодированный в Base64 и обрамлённый заголовками:

-----BEGIN CERTIFICATE-----
MIIC...QAB
-----END CERTIFICATE-----

Особенности:

  • читаем человеком
  • может содержать переносы строк
  • часто используется в HTTPS, TLS, OpenSSL

HEX (шестнадцатеричное представление DER) Бинарный DER-код, представленный как строка hex:

3082 01 0a 0201 00 ...

Особенности:

  • прямое представление DER-байтов
  • используется в низкоуровневых системах
  • требует строгого соблюдения структуры ASN.1

X509.readCertPEM

Назначение

X509.readCertPEM принимает сертификат в формате PEM и преобразует его во внутреннюю структуру объекта X509, выполняя декодирование Base64 и ASN.1 разбор DER-последовательности.

Сигнатура

X509.readCertPEM(pemString)

Входные данные

  • pemString — строка сертификата в PEM формате

  • обязательное наличие заголовков:

    • -----BEGIN CERTIFICATE-----
    • -----END CERTIFICATE-----

Внутренний процесс обработки

  1. Удаление PEM-обёртки
  2. Очистка строк (удаление переносов и пробелов)
  3. Base64-декодирование
  4. Получение DER массива байтов
  5. Передача DER в ASN.1 парсер
  6. Построение структуры X509

Результат выполнения

Метод заполняет объект X509 следующими данными:

  • subject
  • issuer
  • serial number
  • validity (notBefore / notAfter)
  • public key
  • signature algorithm
  • расширения сертификата

Пример использования

var x509 = new X509();

x509.readCertPEM(`
-----BEGIN CERTIFICATE-----
MIICmzCCAYMCBgF...
-----END CERTIFICATE-----
`);

console.log(x509.getSerialNumberHex());
console.log(x509.getSubjectString());

Особенности обработки PEM

Поддержка различных форматов строк

Метод устойчив к:

  • наличию пробелов между строками
  • различным длинам строк Base64
  • Unix и Windows переносам строк

Ошибки формата

Типичные ошибки:

  • отсутствуют BEGIN/END маркеры
  • повреждённый Base64
  • лишние символы вне блока сертификата

В таких случаях парсер либо возвращает пустой объект, либо выбрасывает исключение ASN.1 уровня.


Внутренние ограничения

Метод не выполняет:

  • проверку валидности цепочки доверия
  • проверку срока действия
  • криптографическую валидацию подписи

Он исключительно парсит структуру сертификата.


X509.readCertHex

Назначение

X509.readCertHex используется для обработки сертификата, представленного в виде HEX строки DER-кодирования.

Сигнатура

X509.readCertHex(hexString)

Входные данные

  • hexString — строка, содержащая DER сертификат в шестнадцатеричном виде
  • допускаются пробелы между байтами (опционально)

Пример допустимого формата:

3082010a0282010100a3...

или

30 82 01 0a 02 82 01 01 00 a3 ...

Процесс обработки

  1. Очистка строки от пробелов
  2. Проверка валидности hex символов
  3. Преобразование hex → byte array
  4. ASN.1 декодирование DER структуры
  5. Формирование объекта X509

Результат

После выполнения метода объект X509 получает ту же структуру, что и при readCertPEM:

  • issuer
  • subject
  • public key info
  • validity period
  • signature algorithm
  • extensions

Пример использования

var x509 = new X509();

x509.readCertHex(
  "3082010a0282010100a3b4c5d6..."
);

console.log(x509.getIssuerString());

Особенности HEX-парсинга

Чувствительность к формату

В отличие от PEM, HEX формат:

  • не допускает случайных символов
  • требует корректной длины (чётное число символов)
  • может ломаться при неверной конкатенации

Пробелы

Метод автоматически игнорирует пробелы, что удобно при копировании из hex-дампов.


Внутренняя архитектура X509 после парсинга

После вызова любого из методов (readCertPEM или readCertHex) объект X509 формирует внутреннее представление сертификата на основе ASN.1 структуры:

Основная структура:

Certificate
 ├── TBSCertificate
 │    ├── Version
 │    ├── Serial Number
 │    ├── Signature Algorithm
 │    ├── Issuer
 │    ├── Validity
 │    ├── Subject
 │    ├── Subject Public Key Info
 │    ├── Extensions
 ├── Signature Algorithm
 └── Signature Value

Отличия readCertPEM и readCertHex

Формат входа

  • PEM → текст + Base64 + заголовки
  • HEX → чистый DER в шестнадцатеричном виде

Предобработка

  • PEM требует Base64 декодирования
  • HEX требует только конвертации строки в байты

Устойчивость к ошибкам

  • PEM более устойчив к форматированию
  • HEX более строгий и чувствительный к ошибкам

Производительность

  • HEX обычно быстрее парсится (нет Base64 шага)
  • PEM требует дополнительного декодирования

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

Работа с TLS сертификатами

PEM формат чаще всего используется при:

  • загрузке сертификатов сервера
  • обработке .crt файлов
  • настройке HTTPS
x509.readCertPEM(pemCert);

Обработка бинарных дампов

HEX формат применяется при:

  • анализе сетевых пакетов
  • работе с DER из памяти
  • низкоуровневых криптосистемах
x509.readCertHex(hexCert);

Связанные методы X509

После парсинга сертификата обычно используются:

  • getSubjectString()
  • getIssuerString()
  • getSerialNumberHex()
  • getPublicKey()
  • getNotBefore()
  • getNotAfter()
  • getSignatureAlgorithmName()

Эти методы работают только после успешного выполнения readCertPEM или readCertHex.


Поведение при повторном вызове

Повторный вызов одного из методов:

  • перезаписывает внутреннее состояние X509
  • сбрасывает ранее распарсенные данные
  • не требует создания нового объекта

Обработка некорректных данных

При повреждённых входных данных возможны следующие сценарии:

  • пустой объект X509
  • частично заполненная структура
  • исключение ASN.1 парсера
  • некорректные поля subject/issuer

Библиотека не выполняет строгую валидацию криптографической корректности — только синтаксический разбор.


Практическое значение различий PEM и HEX

В реальных системах выбор метода зависит от источника данных:

  • Web-серверы → PEM
  • Сетевые снифферы → HEX/DER
  • Криптографические библиотеки → DER (HEX представление)
  • Конфигурационные файлы → PEM

Взаимодействие с ASN.1 парсером

Оба метода опираются на внутренний ASN.1 декодер jsrsasign, который:

  • разбирает последовательности SEQUENCE
  • интерпретирует INTEGER, BIT STRING, OBJECT IDENTIFIER
  • восстанавливает древовидную структуру сертификата

Итоговая логика обработки

PEM → Base64 decode → DER bytes → ASN.1 parse → X509 object

HEX → hex decode → DER bytes → ASN.1 parse → X509 object

Обе функции различаются только первым этапом преобразования входных данных, но приводят к одинаковой внутренней модели сертификата.