Создание запроса на сертификат
Параметры выпуска запроса на сертификат можно получить из Политики Сервиса Подписи (метод /policy). Политика Сервиса Подписи содержит:
- Список параметров Удостоверяющих Центров, подключенных к DSS
- Список криптопровайдеров, подключенных к DSS
Каждый элемент списка параметров УЦ содержит:
- Идентификатор Удостоверяющего Центра
- Тип Удостоверяющего Центра
- Шаблон различительного имени (Distinguished Name)
- Список шаблонов сертификатов
- Отображаемое имя
В интерфейсе интегрируемой системы должна быть возможность выбора Удостоверяющего Центра, для которого будет создан запрос на сертификат.
Для каждого Удостоверяющего Центра Сервис Подписи передаёт отображаемое имя (DSSCAPolicy -> Name
), которое может быть показано пользователю.
Для выбранного пользователем Удостоверяющего Центра в интерфейсе интегрируемой системы должна отображаться форма для заполнения Идентифицирующих данных.
Форма составляется в соответстии с шаблоном имени (DSSCAPolicy -> NamePolicy
). У каждого компонента имени в шаблоне есть отображаемое имя (Name
), строковый идентификатор (StringIdentifier
)
и требование к заполнению (IsRequired
).
Так же на форме создания запроса должен быть отображен спискок шаблонов сертификатов (EkuTemplates
). Каждый шаблон сертификата имеет отображаемое имя.
Если Политика Сервиса Подписи содержит более одного криптопровайдера, то необходимо предоставить пользователю возможность выбора.
Данные с формы передаются в метод /requests для создания запроса на сертификат:
- Идентификатор Удостоверяющего Центра
- Различительное имя
- Шаблон сертификата
- ПИН-код на закрытый ключ (опционально)
- Идентификатор криптопровайдера (опционально)
Данные передаются в структуре CertificateRequest.
Идентификатор Удостоверяющего Центра (AuthorityId
) является константой. Он может быть получен от Администратора DSS и зафиксирован в настройках интегрируемой системы.
Примечание
Если Удостоверяющий Центр с заданным идентификатором отсутствует в Политике Сервиса Подписи, то либо он недоступен в данный момент, либо был отключен Администратором DSS. Для выяснения причин недоступности Удостоверяющего Центра следует обратиться к Администратору DSS.
Различительное имя может быть передано в двух форматах:
- Список пар 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
Создание запроса на сертификат с подтверждением при помощи вторичной аутентификации
При создании запроса на сертификат с подтверждением при помощи вторичной аутентификации требуется выполнить следующую последовательность действий (шагов):
- Создание транзакции на Сервисе Подписи
- Подтверждение транзакции на Сервисе Подтверждения Операций
- Получение результата операции на Сервисе Подписи
При этом в массив параметров транзакции метода /transactions должны быть отображены следующие поля запроса на сертификат:
CertificateRequest | Параметры транзакции |
---|---|
AuthorityId | CAId |
PinCode | Не используется |
Template | CertTemplateOid |
DistinguishedName | Не используется |
RawDistinguishedName | CertSubjectName |
Parameters ->EkuString | EkuString |
Parameters ->GroupId | GroupId |
Примечание
При создании запроса на сертификат с подтверждением с подтверждением при помощи вторичной аутентификации различительное имя может быть передано только в строковом представлении.
Примеры запросов
Пример запроса с указанием различительного имени в строковом представлении:
POST https://host/SignServer/rest/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://host/SignServer/rest/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://host/SignServer/rest/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,
"CADisplayName":null,
"DistName":"CN=dssUser, C=RU",
"Subject":"dssUser",
"Status":"PENDING",
"ID":22,
"CARequestID":null,
"CertificateID":0,
"RequestType":"Certificate",
"GroupID":"e8e67f9e-7eed-4116-ad98-20582e4d766e"}
Запрос на сертификат с подтверждением с подтверждением при помощи вторичной аутентификации:
POST https://host/SignServer/rest/api/transactions HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGci ... pz4erYJpgoN_RgQLA
Content-Type: application/json; charset=utf-8
Host: host
Content-Length: 200
Expect: 100-continue
{
"OperationCode":16,
"Parameters":
[
{"Name":"CertSubjectName","Value":"CN=dssUser,C=RU"},
{"Name":"CAId","Value":"11"},
{"Name":"EkuString","Value":"1.2.643.2.2.34.2,1.2.643.2.2.34.4,1.3.6.1.5.5.7.3.2"}
]}
Типовые ошибки
HTTP-код | Ошибка | Описание |
---|---|---|
400 | pending_requests_exist | У пользователя есть необработанный запрос на сертификат (статус PENDING). |
Обработка ответа Сервиса Подписи
При успешном создании запроса на сертификат Сервис Подписи в ответе вернёт структуру DSSCertRequest.
Дальнейшее поведение пользователя зависит от значения поля Status
в структуре DSSCertRequest и типа УЦ, на котором создавался запрос на сертификат.
ACCEPTED - запрос на сертификат принят и обработан УЦ. В данном случае в поле CertificateID
будет записан идентификатор выпущенного сертификата.
REGISTRATION - запрос на сертификат принят в КриптоПро УЦ 2.0 и находится на этапе регистрации пользователя УЦ. В зависимости от настроек подключения DSS к КриптоПро УЦ 2.0, необходимо:
- ожидать одобрения запроса на сертификат Администратором УЦ;
- одобрить запрос Оператором DSS.
PENDING - запрос на сертификат находится в обработке. Если запрос отправлен на КриптоПро УЦ 2.0, то в зависимости от настроек подключения DSS к КриптоПро УЦ 2.0 необходимо:
- ожидать одобрения запроса на сертификат Администратором УЦ;
- одобрить запрос Оператором DSS.
Если запрос создавался через "Сторонний Удостоверяющий Центр", необходимо:
- скачать запрос на сертификат по идентификатору /requests;
- передать запроса на сертификат в УЦ;
- выпущенный сертификат установить в DSS.
Запрос на сертификат (PKCS#10) в формате Base64 содержится в поле Base64Request
структуры DSSCertRequest.
REJECTED - запрос отклонён. Дальнейшая обработка запроса невозможна. Для выяснения причин отклонения запроса необходимо обратиться к Администратору УЦ.