Кратко

  • В обычном обмене CMP поверх HTTP RFC 9811 требует ответ 200 OK с сообщением CMP в теле. Внешний успех не определяет, была ли операция принята, разрешена с изменениями, отклонена или оставлена в ожидании.
  • Надёжная история связывает целевой орган, HTTP, защищённое PKIMessage, transactionID, опрос, подтверждение, хранилище ключей и проверку зависимыми системами, не смешивая эти состояния.

Самая опасная ошибка автоматизации сертификатов может выглядеть как успех: 200 OK, значит всё завершено.

Из HTTP следует только первая половина. RFC 9811, опубликованный в июле 2025 года как документ Standards Track IETF, определяет перенос Certificate Management Protocol через HTTP. DER-кодированное PKIMessage помещается в тело POST с типом application/pkixcmp. При успехе обычного HTTP-запроса сервер возвращает ответ CMP в теле ответа 200; другие успешные коды 2xx для этого не применяются.

Точная оболочка не передаёт HTTP полномочия удостоверяющего центра. Она ограничивает внешний чек, чтобы внутренний протокол сохранил решение.

Два результата в одном ответе

RFC 9810 задаёт статусы CMP, среди которых accepted, grantedWithMods, rejection и waiting. Один и тот же HTTP 200 может принести точное разрешение, разрешение с изменениями, отказ либо сообщение о незавершённой обработке. На графике доступности они одинаковы, но требуют разных последующих действий.

Обратная ошибка — не читать тело после 4xx или 5xx. RFC 9811 требует поддержки ответа CMP в содержимом HTTP-ответов диапазонов 2xx, 4xx и 5xx. Внешняя ошибка может сопровождаться наиболее конкретным, защищённым и связанным с транзакцией объяснением.

Проверка должна идти цепочкой: принять HTTP-ответ, проверить тип и пределы, разобрать DER, проверить защиту CMP и отправителя, найти транзакцию, затем истолковать тип тела, статус и сведения об ошибке. Каждая ступень доказывает только свой переход.

Нет ответа — нет подтверждения, но не обязательно нет эффекта

RFC 9811 предписывает считать CMP-сообщение не доставленным успешно, если получение не подтверждено HTTP-ответом. Это консервативное правило транспорта, запрещающее утверждать доставку без квитанции. Оно не наблюдает внутреннее состояние сервера.

Соединение может оборваться после чтения или обработки запроса. Клиент видит неподтверждённую доставку, а у CA или RA уже может существовать транзакция. Немедленный повтор с новым идентификатором способен создать дубликат; отказ от повтора — сорвать обновление.

Безопасное продолжение сохраняет исходный transactionID, хеш сообщения, целевой орган, тип операции и временную границу. Если CMP допускает продолжение или опрос, используется этот путь. Если состояние невозможно согласовать, оно остаётся неопределённым и требует эскалации. Новая транзакция не превращает старую неопределённость в доказанный ноль.

Состояние поверх транспорта без состояния

Некоторые операции PKI состоят из нескольких пар запрос-ответ. HTTP может рассматривать каждый перенос отдельно, но transactionID объединяет сообщения CMP. После установления значения последующие запросы и ответы должны его сохранять. Клиент не должен одновременно вести для одного сервера две транзакции с одинаковой меткой.

RFC 9810 рекомендует 128 псевдослучайных бит при создании клиентом. Сервер может требовать уникальность пары {клиент, transactionID} или самого значения в зависимости от способа различать клиентов. Коллизия, мешающая правильной связи, приводит к transactionIdInUse.

Корреляция — не аутентификация. Поле не доказывает личность, полномочия на профиль, целостность сообщения или бизнес-идемпотентность. Защита CMP, nonce, идентификаторы запроса и локальная политика отвечают за другие границы. Их нужно связать в одном деле, но нельзя называть номер отслеживания удостоверением полномочий.

У waiting есть собственные часы

Статус waiting означает, что содержимое запроса ещё не обработано. Клиент отправляет pollReq. CA или RA отвечает окончательным результатом, когда он готов, либо возвращает pollRep с checkAfter. До следующего опроса проходит как минимум указанное время.

Причиной могут быть нагрузка backend, офлайн-передача между субъектами PKI или ручное одобрение сотрудника RA. Сетевой обмен закончился, институциональное решение — нет.

Автоматизация хранит владельца ожидания, ближайшее разрешённое время опроса, возраст, порог эскалации и остаток срока текущего сертификата. Опрос раньше checkAfter не ускоряет человека и расходует дефицитную мощность. Превращение ожидания в отказ создаёт параллельные заявки; превращение в успех закрывает контроль без сертификата.

Выдача может быть не концом

RFC 9810 задаёт certConf, которым клиент принимает или отвергает возвращённые сертификаты, и pkiconf, которым орган подтверждает завершение. Если CA изменил запрошенные поля, клиент обязан исследовать фактический сертификат. grantedWithMods не является автоматическим разрешением на установку.

История разделяется на защищённый ответ и статус, отпечаток, отличия от заявки, подтверждение клиента, закрытие протокола, запись в хранилище, активацию сервиса и проверку доверяющей стороной. Один отпечаток соединяет записи, но не доказывает, что все действия состоялись.

База выдачи может содержать новый сертификат, пока балансировщик предъявляет старый. Средство развёртывания может быть зелёным, хотя важные клиенты отвергают цепочку, имя, назначение или срок. Работающий сервис, в свою очередь, может скрывать потерянное подтверждение CMP. Исполнение и протокольное закрытие требуют разных свидетельств.

Для объявлений действует другой договор

При push-объявлениях о ключе CA, сертификате, отзыве или CRL сервер CMP становится HTTP-клиентом, а получатель не возвращает сообщение CMP. Он отвечает пустым HTTP-ответом.

201 Created означает, что информация сохранена или уже присутствовала. 202 Accepted означает лишь принятие для последующей обработки; отправитель может выждать и повторить передачу до подтверждения. Эти значения нельзя переносить в обычный обмен, где 200 несёт решение CMP.

Без должной аутентификации и защиты подтверждение обработки объявления нельзя считать достоверным, и архитектура PKI не должна зависеть от гарантированной доставки. Код становится свидетельством только вместе с происхождением.

/.well-known/cmp задаёт путь, а не полномочия

CMP-серверы с HTTP или HTTPS обязаны поддерживать префикс /.well-known/cmp. Дополнительные сегменты могут различать операцию, CA или профиль. Реестр Well-Known URIs IANA содержит cmp как постоянный суффикс под управлением IETF.

Путь говорит, где спросить внутри origin, но не выбирает правильный host. RFC 8615 не определяет обнаружение имени и предупреждает о контроле над всей origin. Источник конфигурации, DNS-результат, перенаправления, TLS-узел, защищённый отправитель CMP и локальная политика должны сохраняться и сравниваться.

RFC 9811 разрешает поддержку 3xx, но требует осторожности с автоматическим переходом. Злонамеренно сохранённый адрес из 301 способен надолго отсечь клиент от правильного сервера. Удобство HTTP не должно незаметно менять точку доверия PKI.

Граф квитанций вместо одного флага

Минимальное дело содержит ожидаемую CA/RA, настроенный и итоговый URI, цепочку redirect, TLS-узел, метод, код, тип и хеши HTTP; отправителя, получателя, тип и проверку защиты CMP; transactionID, nonce и номер запроса; PKIStatus, ошибку, checkAfter; отпечаток, изменения, certConf/pkiconf; версию хранилища, активацию, откат и независимые наблюдения важных сервисов.

Ограничения тоже сохраняются. Нет ответа — доставка не подтверждена. 200 — ответ получен. Выдан — объект создан. Установлен — изменено локальное состояние. Успешное соединение — конкретная сторона приняла конкретный материал. Ни одна ступень не создаёт следующую автоматически.

Running-Code Primacy требует окончательной проверки в работающем клиенте, состоянии CA/RA, хранилище и реальном соединении. Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption поддерживает строгий, но узкий общий слой без присвоения политики и развёртывания. Reality Layers не позволяет сжать несколько истин в один зелёный символ.

RFC 9811 не ослабляет 200 OK. Он делает квитанцию честной: HTTP-запрос успешен, CMP-ответ получен. Решение о сертификате всё ещё надо прочесть внутри.

Источники