Показать/Скрыть содержание

    Создание запроса на сертификат

    Параметры выпуска запроса на сертификат можно получить из политики Сервиса Подписи (метод /policy). Политика Сервиса Подписи содержит:

    • список параметров Удостоверяющих Центров, подключенных к СЭП;
    • список криптопровайдеров, подключенных к СЭП.

    Каждый элемент списка параметров УЦ содержит:

    • Идентификатор УЦ
    • Тип УЦ
    • Шаблон различительного имени (Distinguished Name)
    • Список шаблонов сертификатов
    • Отображаемое имя

    В интерфейсе интегрируемой системы должна быть возможность выбора Удостоверяющего Центра, для которого будет создан запрос на сертификат. Для каждого Удостоверяющего Центра Сервис Подписи передает отображаемое имя (DSSCAPolicy -> Name), которое может быть показано пользователю.

    Для выбранного пользователем Удостоверяющего Центра в интерфейсе интегрируемой системы должна отображаться форма для заполнения идентифицирующих данных. Форма составляется в соответстии с шаблоном имени (DSSCAPolicy -> NamePolicy). У каждого компонента имени в шаблоне есть отображаемое имя (Name), строковый идентификатор (StringIdentifier) и требование к заполнению (IsRequired).

    Также на форме создания запроса должен быть отображен спискок шаблонов сертификатов (EkuTemplates). Каждый шаблон сертификата имеет отображаемое имя.

    Если политика Сервиса Подписи содержит более одного криптопровайдера, необходимо предоставить пользователю возможность выбора.

    Данные с формы передаются в метод /requests для создания запроса на сертификат:

    • Идентификатор Удостоверяющего Центра
    • Различительное имя
    • Шаблон сертификата
    • ПИН-код на закрытый ключ (опционально)
    • Идентификатор криптопровайдера (опционально)

    Данные передаются в структуре CertificateRequest.

    Идентификатор Удостоверяющего Центра (AuthorityId) является константой. Он может быть получен от Администратора и зафиксирован в настройках интегрируемой системы.

    Примечание

    Если Удостоверяющий Центр с заданным идентификатором отсутствует в Политике Сервиса Подписи, то либо он недоступен в данный момент, либо был отключен Администратором. Для выяснения причин недоступности Удостоверяющего Центра следует обратиться к Администратору.

    Различительное имя может быть передано в двух форматах:

    • Список пар oid:value (DistinguishedName)
    • Строковое представление (RawDistinguishedName)

    Объектные идентификаторы (OID) компонентов имени указаны в шаблоне имени.

    Примечание

    Строковое представление различительного имени кодируется согласно RFC 1779.

    Шаблон сертификата представляет собой набор объектных идентификаторов, которые попадут в расширение Enhanced Key Usage (EKU) запроса на сертификат, или идентификатор шаблона сертификата КриптоПро УЦ 2.0, который попадет в расширение Certificate Template (1.3.6.1.4.1.311.21.7).

    Шаблон передается через разные поля запроса на сертификат в зависимости от типа:

    • Enhanced key usage - передается в дополнительных параметрах запроса Parameters в ключе EkuString в формате oid1,oid2,...,oidN.
    Примечание

    Данный шаблон используется при создании запроса на сертификат к Удостоверяющему Центру типа 0 (КриптоПро УЦ 1.5) и 2 (Сторонний УЦ).

    • Certificate Template - передается в параметре Template запроса на сертификат.
    Примечание

    Данный шаблон используется при создании запроса на сертификат к Удостоверяющему Центру типа 1 (КриптоПро УЦ 2.0) и 2 (Сторонний УЦ).

    Идентификатор криптопровайдера должен быть задан, если в Политике Сервиса Подписи доступно более одного криптопровайдера. Идентификатор криптопровайдера (DSSCSPPolicy -> GroupId) передается в дополнительных параметрах запроса в ключе GroupId

    Примеры запросов

    Пример запроса с указанием различительного имени в строковом представлении:

    POST https://{{hostname}}/{{instanceName}}/api/requests HTTP/1.1
    Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGci ... 2bgrniEg
    Content-Type: application/json; charset=utf-8
    Host: host
    Content-Length: 153
    Expect: 100-continue
    
    {
        "AuthorityId":11,
        "PinCode":"",
        "RawDistinguishedName":"CN=dssUser,C=RU",
        "Parameters":
            {"EkuString":"1.2.643.2.2.34.2,1.2.643.2.2.34.4,1.3.6.1.5.5.7.3.2"}
    }
    

    Пример запроса с указанием различительного имени в виде набора компонентов:

    POST https://{{hostname}}/{{instanceName}}/api/requests HTTP/1.1
    Authorization: Bearer eyJ0eXAiOiJKV1QiLCJ ... PhYmXscTmwGkD8b1SWy0nYQ
    Content-Type: application/json; charset=utf-8
    Host: host
    Content-Length: 169
    Expect: 100-continue
    
    {
        "AuthorityId":11,
        "PinCode":"",
        "DistinguishedName":{"2.5.4.3":"dssUser","2.5.4.6":"RU"},
        "Parameters":
            {
                "EkuString":"1.2.643.2.2.34.2,1.2.643.2.2.34.4,1.3.6.1.5.5.7.3.2"
            }
    }
    

    Пример запроса с указанием шаблона сертификата:

    POST https://{{hostname}}/{{instanceName}}/api/requests HTTP/1.1
    Authorization: Bearer eyJ0eXAiOiJKV ... Ysj1GpIVmR2hw
    Content-Type: application/json; charset=utf-8
    Host: host
    Content-Length: 135
    Expect: 100-continue
    
    {
        "AuthorityId":11,
        "PinCode":"",
        "Template":"1.3.6.1.5.5.7.3.2",
        "DistinguishedName":{"2.5.4.3":"dssUser","2.5.4.6":"RU"},
        "Parameters":{}}
    

    Пример ответа:

    HTTP/1.1 200 OK
    Content-Length: 723
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.5
    Date: Tue, 04 Sep 2018 13:35:02 GMT
    
    {
        "CertificateType":"ServerSide",
        "Base64Request":"MIIBQDCB8AIBADAfMQswCQYD ... iOibLabDHz2VYlG8CsaxjE",
        "CertificateAuthorityID":11,
        "DistName":"CN=dssUser, C=RU",
        "Subject":"dssUser",
        "Status":"PENDING",
        "ID":22,
        "CARequestID":null,
        "CertificateID":0,
        "RequestType":"Certificate",
        "GroupID":"e8e67f9e-7eed-4116-ad98-20582e4d766e"}
    

    Типовые ошибки

    HTTP-код Ошибка Описание
    400 pending_requests_exist У пользователя есть необработанный запрос на сертификат (статус PENDING).

    Обработка ответа Сервиса Подписи

    При успешном создании запроса на сертификат Сервис Подписи в ответе вернет структуру DSSCertRequest.

    Дальнейшее поведение пользователя зависит от значения поля Status в структуре DSSCertRequest и типа УЦ, на котором создавался запрос на сертификат.

    ACCEPTED - запрос на сертификат принят и обработан УЦ. В данном случае в поле CertificateID будет записан идентификатор выпущенного сертификата.

    REGISTRATION - запрос на сертификат принят в КриптоПро УЦ 2.0 и находится на этапе регистрации пользователя УЦ.

    В зависимости от настроек подключения СЭП к КриптоПро УЦ 2.0, необходимо:

    • ожидать одобрения запроса на сертификат Администратором УЦ;
    • одобрить запрос Оператором СЭП.

    PENDING - запрос на сертификат находится в обработке.

    Если запрос отправлен на КриптоПро УЦ 2.0, то в зависимости от настроек подключения СЭП к КриптоПро УЦ 2.0 необходимо:

    • ожидать одобрения запроса на сертификат Администратором УЦ;
    • одобрить запрос Оператором СЭП.

    Если запрос создавался через "Сторонний Удостоверяющий Центр", необходимо:

    • скачать запрос на сертификат по идентификатору /requests;
    • передать запрос на сертификат в УЦ;
    • выпущенный сертификат установить в СЭП.

    Запрос на сертификат (PKCS#10) в формате Base64 содержится в поле Base64Request структуры DSSCertRequest.

    REJECTED - запрос отклонен. Дальнейшая обработка запроса невозможна. Для выяснения причин отклонения запроса необходимо обратиться к Администратору УЦ.

    В начало © ООО "КРИПТО-ПРО", 2000–2025