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

Пространство имён KJUR.asn1.ocsp в Jsrsasign реализует набор ASN.1-структур и вспомогательных классов для формирования и разбора OCSP-сообщений (Online Certificate Status Protocol). Основная задача модуля — работа с запросами и ответами OCSP на уровне структуры ASN.1, включая построение корректно закодированных DER-объектов, соответствующих RFC 6960.


Модуль строится вокруг нескольких ключевых сущностей:

  • идентификатор сертификата (CertID)
  • запрос OCSP (OCSPRequest)
  • ответ OCSP (OCSPResponse)
  • базовые структуры ASN.1, используемые внутри протокола

Каждая структура представлена в виде класса, наследующегося от KJUR.asn1.ASN1Object или использующего композицию ASN.1-элементов.


OCSPCertID — идентификатор сертификата

Назначение

OCSPCertID используется для однозначной идентификации сертификата, статус которого запрашивается через OCSP.

Структура

Идентификатор включает:

  • алгоритм хэширования issuerNameHash
  • хэш имени издателя сертификата
  • хэш открытого ключа издателя
  • серийный номер сертификата

Основные поля

  • hashAlg — алгоритм (например SHA-1, SHA-256)
  • issuerNameHash — хэш имени издателя
  • issuerKeyHash — хэш публичного ключа издателя
  • serial — серийный номер сертификата

Ключевые методы

constructor(params)

Создаёт объект идентификатора сертификата.

Параметры:

  • alg — алгоритм хеширования
  • issuerName — ASN.1 структура имени издателя
  • issuerKey — публичный ключ издателя
  • serial — серийный номер

getEncodedHex()

Возвращает DER-кодированное представление идентификатора в HEX-строке.


OCSPRequest — формирование OCSP запроса

Назначение

OCSPRequest формирует структуру запроса, отправляемого OCSP-респонденту для проверки статуса одного или нескольких сертификатов.

ASN.1 структура

OCSPRequest включает:

  • tbsRequest (to be signed request)
  • optional signature
  • optional extensions

Основные компоненты

TBSRequest

Содержит:

  • version
  • requestList
  • requestorName (опционально)
  • requestExtensions (опционально)

RequestList

Массив объектов Request, каждый из которых содержит CertID.


Методы OCSPRequest

constructor(params)

Создаёт OCSP-запрос.

Параметры:

  • reqList — массив объектов запроса
  • extensions — ASN.1 расширения
  • signer — параметры подписи (если запрос подписывается)

setRequestList(requests)

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

Каждый элемент должен содержать:

  • certId — объект OCSPCertID

setRequestorName(name)

Добавляет имя инициатора запроса.

Используется редко и требует ASN.1 GeneralName структуры.


sign(privateKey, alg)

Подписывает OCSP-запрос.

Параметры:

  • privateKey — приватный ключ в PEM или KEY формате
  • alg — алгоритм подписи (например SHA256withRSA)

Результатом является добавление поля signature в ASN.1 структуру.


getEncodedHex()

Возвращает полный OCSPRequest в DER HEX-формате.


OCSPResponse — обработка ответа

Назначение

OCSPResponse используется для разбора и формирования ответов OCSP-сервера.

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

OCSPResponse включает:

  • responseStatus
  • responseBytes (опционально)

Классы состояния ответа

responseStatus

Возможные значения:

  • successful (0)
  • malformedRequest (1)
  • internalError (2)
  • tryLater (3)
  • sigRequired (5)
  • unauthorized (6)

Методы OCSPResponse

constructor(params)

Создаёт объект ответа OCSP.

Параметры:

  • status — код состояния
  • basic — базовый ответ (BasicOCSPResponse)

getStatus()

Возвращает числовой код статуса ответа.


getBasicOCSPResponse()

Извлекает объект BasicOCSPResponse, если он присутствует.


BasicOCSPResponse

Назначение

Представляет основное содержимое успешного OCSP-ответа.

Структура

Включает:

  • tbsResponseData
  • signatureAlgorithm
  • signature
  • certificates (опционально)

ResponseData (tbsResponseData)

Содержит:

  • version
  • responderID
  • producedAt
  • responses (массив SingleResponse)

SingleResponse

Каждый элемент массива responses описывает статус одного сертификата.

Поля:

  • certID
  • certStatus
  • thisUpdate
  • nextUpdate (опционально)
  • singleExtensions (опционально)

certStatus

Может принимать значения:

  • good
  • revoked
  • unknown

Методы BasicOCSPResponse

getResponseList()

Возвращает список проверенных сертификатов.

Каждый элемент содержит статус и временные метки.


getCertStatus(serialNumber)

Позволяет получить статус сертификата по серийному номеру.

Возвращает:

  • “good”
  • “revoked”
  • “unknown”

verifySignature(publicKey)

Проверяет подпись OCSP-ответа.

Параметры:

  • publicKey — публичный ключ OCSP-респондента

Вспомогательные ASN.1 классы OCSP

ResponseBytes

Содержит закодированные данные ответа:

  • responseType (id-pkix-ocsp-basic)
  • response (OCTET STRING с DER данными)

AlgorithmIdentifier

Используется для указания алгоритма подписи:

  • algorithm OID
  • параметры (опционально)

Построение OCSP запроса вручную

Структура построения включает последовательность:

  1. Создание CertID
  2. Формирование Request
  3. Добавление в RequestList
  4. Создание OCSPRequest
  5. При необходимости — подпись

Разбор OCSP ответа

Процесс декодирования:

  1. Парсинг ASN.1 структуры OCSPResponse
  2. Проверка responseStatus
  3. Извлечение BasicOCSPResponse
  4. Декодирование ResponseData
  5. Анализ SingleResponse элементов

Работа с ASN.1 внутри OCSP

Все структуры OCSP опираются на базовые ASN.1 классы Jsrsasign:

  • ASN1Object
  • ASN1Sequence
  • ASN1Integer
  • ASN1OctetString
  • ASN1Enumerated

OCSP-модуль не выполняет криптографию напрямую, а использует внешние механизмы Jsrsasign для хэширования и подписи.


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

  • все структуры формируются в DER-формате
  • строгая совместимость с RFC 6960
  • поддержка SHA-1 и SHA-2 семейств
  • возможность работы без внешних библиотек
  • совместимость с браузерной средой и Node.js

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

  • проверка статуса TLS-сертификата
  • реализация собственного OCSP-клиента
  • валидация цепочек сертификатов
  • аудит инфраструктуры PKI
  • интеграция с системами доверия в криптографии

Структурные зависимости

KJUR.asn1.ocsp тесно связан с:

  • KJUR.crypto — для хэширования и подписи
  • KJUR.asn1.x509 — для работы с сертификатами
  • KJUR.asn1.ASN1Object — базовая ASN.1 инфраструктура

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

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

  • некорректный CertID → неправильный хэш issuer
  • неверный алгоритм подписи
  • повреждённый DER-ответ
  • несоответствие OID OCSP basic response

Обработка осуществляется через исключения Jsrsasign или возврат null-структур при парсинге.


Производительность и ограничения

  • ASN.1 парсинг зависит от размера ответа
  • подпись OCSP может быть ресурсоёмкой при RSA-2048+
  • рекомендуется кэширование OCSP-ответов
  • отсутствует встроенный HTTP-слой (только криптографическая часть)