Класс KJUR.asn1.csr.CSR представляет собой
высокоуровневую реализацию формирования и обработки PKCS#10 Certificate
Signing Request (CSR) в библиотеке Jsrsasign. Он инкапсулирует структуру
запроса на сертификат, включая данные субъекта, открытый ключ и
подпись.
Основная задача класса заключается в создании корректной ASN.1 структуры CSR и её последующей сериализации в форматы DER и PEM.
subject — DN (Distinguished Name) субъекта
сертификатаsubjectPublicKey — открытый ключ субъектаattributes — дополнительные атрибуты CSR
(опционально)signatureAlg — алгоритм подписи (например,
SHA256withRSA)sigHex — подпись CSR в hex-форматеsetSubject(x509Name) Устанавливает имя субъекта CSR.
csr.setSubject("/C=RU/O=Example/CN=test.example.com");
setPublicKey(pubKey) Назначает открытый ключ, который будет включён в запрос.
csr.setPublicKey(rsaKey);
sign(privateKey, hashAlg) Формирует подпись CSR с использованием приватного ключа.
csr.sign(privateKey, "SHA256withRSA");
Подпись вычисляется над DER-представлением CertificationRequestInfo.
getPEM() Возвращает CSR в формате PEM.
const pem = csr.getPEM();
getHex() Возвращает DER-представление CSR в hex-формате.
const hex = csr.getHex();
verifySignature() Проверяет корректность подписи CSR с использованием публичного ключа.
KJUR.asn1.csr.CSRUtil представляет собой вспомогательный
утилитарный класс, упрощающий работу с CSR. Он используется для
генерации, парсинга и анализа запросов на сертификаты без необходимости
ручного управления ASN.1 структурой.
newCSRPEM(param) Создаёт CSR и возвращает его в PEM формате.
const csrPem = KJUR.asn1.csr.CSRUtil.newCSRPEM({
subject: { str: "/C=RU/O=Org/CN=site.com" },
sbjpubkey: rsaPublicKey,
sigalg: "SHA256withRSA",
sbjprvkey: rsaPrivateKey
});
Параметры объекта:
subject — строка или объект X.500 имениsbjpubkey — публичный ключ субъектаsbjprvkey — приватный ключ для подписиsigalg — алгоритм подписиgetInfo(pemCSR) Извлекает структурированную информацию из CSR.
const info = KJUR.asn1.csr.CSRUtil.getInfo(csrPem);
Результат включает:
verifySignature(pemCSR, pubKey) Проверяет подпись CSR.
const isValid = KJUR.asn1.csr.CSRUtil.verifySignature(csrPem, publicKey);
CSR в Jsrsasign соответствует стандарту PKCS#10 и состоит из трёх основных компонентов:
CertificationRequestInfo
AlgorithmIdentifier
signature
Внутренне библиотека использует ASN.1 конструкторы из пространства
KJUR.asn1, такие как:
KJUR.asn1.DERSequenceKJUR.asn1.DERIntegerKJUR.asn1.DERBitStringKJUR.asn1.x509.X500NameНизкоуровневое создание CSR требует явного управления структурой:
const csr = new KJUR.asn1.csr.CSR();
csr.setSubject("/C=RU/O=Org/CN=example.com");
csr.setPublicKey(pubKey);
csr.sign(prvKey, "SHA256withRSA");
const pem = csr.getPEM();
Jsrsasign позволяет декодировать CSR из PEM для анализа его структуры:
const csr = new KJUR.asn1.csr.CSR({ pem: csrPem });
const subject = csr.subject;
const pubKey = csr.subjectPublicKey;
const sigAlg = csr.signatureAlg;
Поддерживаются стандартные алгоритмы:
SHA1withRSASHA256withRSASHA384withRSASHA512withRSAECDSAwithSHA256Алгоритм влияет на формирование AlgorithmIdentifier и
процесс вычисления подписи над DER-структурой
CertificationRequestInfo.
При работе с CSR через KJUR.asn1.csr часто возникают
ограничения, связанные с:
Валидация обычно происходит на этапе sign() и
verifySignature().
Классы CSR тесно связаны с RSA и ECDSA ключами из
KEYUTIL:
const rsaKey = KEYUTIL.generateKeypair("RSA", 2048);
Публичный ключ извлекается и вставляется в CSR в формате SubjectPublicKeyInfo.
Структура CSR в ASN.1 нотации:
CertificationRequest ::= SEQUENCE {
certificationRequestInfo CertificationRequestInfo,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING
}
Jsrsasign полностью отражает эту структуру через объектную модель
KJUR.asn1.csr.