Методы X509.readCertPEM и X509.readCertHex
в jsrsasign используются для разбора X.509 сертификатов из различных
представлений — PEM и HEX. Оба метода относятся к низкоуровневому
парсингу сертификатов и служат точкой входа в структуру
X509, позволяя получить доступ к полям сертификата после
его декодирования.
X.509 сертификаты в практике встречаются в нескольких текстовых и бинарных представлениях. Два наиболее распространённых формата:
PEM (Privacy-Enhanced Mail) Текстовый формат, закодированный в Base64 и обрамлённый заголовками:
-----BEGIN CERTIFICATE-----
MIIC...QAB
-----END CERTIFICATE-----
Особенности:
HEX (шестнадцатеричное представление DER) Бинарный DER-код, представленный как строка hex:
3082 01 0a 0201 00 ...
Особенности:
X509.readCertPEM принимает сертификат в формате PEM и
преобразует его во внутреннюю структуру объекта X509, выполняя
декодирование Base64 и ASN.1 разбор DER-последовательности.
X509.readCertPEM(pemString)
pemString — строка сертификата в PEM
формате
обязательное наличие заголовков:
-----BEGIN CERTIFICATE----------END CERTIFICATE-----Метод заполняет объект X509 следующими данными:
var x509 = new X509();
x509.readCertPEM(`
-----BEGIN CERTIFICATE-----
MIICmzCCAYMCBgF...
-----END CERTIFICATE-----
`);
console.log(x509.getSerialNumberHex());
console.log(x509.getSubjectString());
Метод устойчив к:
Типичные ошибки:
В таких случаях парсер либо возвращает пустой объект, либо выбрасывает исключение ASN.1 уровня.
Метод не выполняет:
Он исключительно парсит структуру сертификата.
X509.readCertHex используется для обработки сертификата,
представленного в виде HEX строки DER-кодирования.
X509.readCertHex(hexString)
hexString — строка, содержащая DER сертификат в
шестнадцатеричном видеПример допустимого формата:
3082010a0282010100a3...
или
30 82 01 0a 02 82 01 01 00 a3 ...
После выполнения метода объект X509 получает ту же структуру, что и
при readCertPEM:
var x509 = new X509();
x509.readCertHex(
"3082010a0282010100a3b4c5d6..."
);
console.log(x509.getIssuerString());
В отличие от PEM, HEX формат:
Метод автоматически игнорирует пробелы, что удобно при копировании из hex-дампов.
После вызова любого из методов (readCertPEM или
readCertHex) объект X509 формирует внутреннее представление
сертификата на основе ASN.1 структуры:
Certificate
├── TBSCertificate
│ ├── Version
│ ├── Serial Number
│ ├── Signature Algorithm
│ ├── Issuer
│ ├── Validity
│ ├── Subject
│ ├── Subject Public Key Info
│ ├── Extensions
├── Signature Algorithm
└── Signature Value
PEM формат чаще всего используется при:
x509.readCertPEM(pemCert);
HEX формат применяется при:
x509.readCertHex(hexCert);
После парсинга сертификата обычно используются:
getSubjectString()getIssuerString()getSerialNumberHex()getPublicKey()getNotBefore()getNotAfter()getSignatureAlgorithmName()Эти методы работают только после успешного выполнения
readCertPEM или readCertHex.
Повторный вызов одного из методов:
При повреждённых входных данных возможны следующие сценарии:
Библиотека не выполняет строгую валидацию криптографической корректности — только синтаксический разбор.
В реальных системах выбор метода зависит от источника данных:
Оба метода опираются на внутренний ASN.1 декодер jsrsasign, который:
PEM → Base64 decode → DER bytes → ASN.1 parse → X509 object
HEX → hex decode → DER bytes → ASN.1 parse → X509 object
Обе функции различаются только первым этапом преобразования входных данных, но приводят к одинаковой внутренней модели сертификата.