Show / Hide Table of Contents

    Выпуск сертификата пользователя

    Раздел содержит руководство разработчика по выпуску сертификата пользователя. В разделе приведены основные сценарии использования, примеры HTTP-запросов и ответов сервисов DSS.

    В разделе приведены сценарии выпуска сертификата:

    • Оператором DSS
    • Пользователем DSS

    Перед началом интеграции Администратору DSS необходимо:

    • Выпустить и зарегистрировать на DSS cертификат аутентификации Оператора DSS
    • Зарегистрировать OAuth-клиента
    • Подключить к Сервису Подписи модуль взаимодействия с УЦ

    Общий подход для Пользователей и Операторов при выпуске сертификата:

    1. Аутентификация на Центре Идентификации
    2. Получение параметров выпуска запроса на сертификат
    3. Создание запроса на сертификат
    4. Подтверждение создания запроса на сертификат (для пользователей)
    5. Установка сертификата
    Примечание

    В примере рассматривается выпуск сертификата пользователя через Сторонний УЦ. Созданный на шаге 3 запрос на сертификат (PKCS#10) Пользователь или Оператор самостоятельно передать в УЦ для выпуска Сертификата. Выпущенный сертификат должен быть установлен на Сервисе Подписи через API.

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

    Параметры выпуска запроса на сертификат можно получить из Политики Сервиса Подписи (метод /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 - запрос отклонён. Дальнейшая обработка запроса невозможна. Для выяснения причин отклонения запроса необходимо обратиться к Администратору УЦ.

    Выпуск сертификата Оператором DSS

    Аутентификация Оператора DSS на Центре Идентификации

    Аутентификация Оператора DSS производится по сертификату (HTTPS с аутентификацией клиента).

    Для получения AccessToken используется OAuth сценарий с использованием кода авторизации. Подробная информация по протоколу аутентификации: The OAuth 2.0 Authorization Framework

    Администратор DSS должен предварительно настроить OAuth клиента на сервере DSS:

    • создав нового клиента:
    Add-DssClient -Identifier testClient -Name testClient -Description "Test Client Description" -RedirectUri urn:ietf:wg:oauth:2.0:oob:auto -AllowedFlow ResourceOwner,AuthorizationCode
    
    • измененив настройки существующего клиента:
    Set-DssClient -ClientId testClient -RedirectUri urn:ietf:wg:oauth:2.0:oob:auto -AllowedFlow ResourceOwner,AuthorizationCode
    
    Примечание

    Значение RedirectUri urn:ietf:wg:oauth:2.0:oob:auto говорит серверу DSS о том, что AccessToken необходимо вернуть непосредственно в ответе на запрос клиента. Данное значение используется в тех случаях, когда для клиента трудозатратно открыть слушателя на другом URL.

    Последовательность шагов:

    1. Инициация аутентификации, путём отправки запроса на конечную точку /authorize/certificate по HTTPS с аутентификацией по сертификату.
    2. Получение кода авторизации.
    3. Получение AccessToken по коду авторизации.
    4. Получение делегирующего AccessToken.

    AccessToken, полученный на шаге 3, позволит Оператору DSS получить Политику Сервиса Подписи.

    Для выполнения действий от имени пользователя на Сервисе Подписи необходимо получить делегирующий AccessToken. Делегирующий AccessToken позволит Оператору DSS выпустить сертификат пользователя, просмотреть список сертификатов и запросов пользователя и т.п.

    Инициация аутентификации

    Конечная точка для аутентификации Оператора DSS: /authorize/certificate

    Параметры запроса:

    • redirect_uri – зарегистрированный на Центре Идентификации адрес возврата (по этому адресу будет возвращён запрошенный код авторизации). Допустимые значения данного параметра сохраняются в ЦИ на этапе регистрации клиента.
    • response_type – в данном сценарии всегда должен иметь значение code.
    • scope – области использования маркера. Должен содержать значение dss.
    • resource – идентификатор Сервиса Подписи.

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

    GET https://host/STS/oauth/authorize/certificate?client_id=testClient&response_type=code&scope=dss&redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto&resource=urn:cryptopro:dss:signserver:signserver
    Host: host
    Connection: Keep-Alive
    

    Получение кода авторизации

    В случае успешной аутентификации

    • ответ сервера будет иметь статус HTTP 302
    • В заголовке Location будет сожержаться адрес получения AccessToken.

    Т.е. в примере используется специальное значение redirect_uri, то клиенту необходимо из заголовка Location извлечь значение параметра code. Значение параметра code будет использовано для получения AccessToken на следующем шаге.

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

    HTTP/1.1 302 Found
    Cache-Control: no-cache
    Pragma: no-cache
    Expires: -1
    Location: urn:ietf:wg:oauth:2.0:oob:auto?code=65e4322a9751cf9ba43012692ce02ec1
    Date: Fri, 07 Sep 2018 10:30:24 GMT
    Content-Length: 0
    

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

    HTTP-код Ошибка Описание
    400 invalid_client OAuth-клиент не зарегистрирован или неверно указан clienID
    400 unauthorized_client OAuth-клиент использует незарегистрированный сценарий аутентификации (Flow)
    400 invalid_request Неверно сформирован параметр resource
    500 An error has occurred 1. Проверяющая сторона с идентификатором resource не зарегистрирована.

    Получение AccessToken

    Для получения маркера доступа используется конечная точка oauth/token.

    Параметры запроса:

    • grant_type - тип разрешения, в данном сценарии равен authorization_code.
    • code – код авторизации, полученный на предыдущем шаге.
    • resource – идентификатор Сервиса Подписи.
    • redirect_uri – зарегистрированный на Центре Идентификации адрес возврата.

    В заголовке Authorization HTTP-запроса клиент должен передать идентификатор OAuth-клиента и секрет (если используется): Authorization: Basic Base64(<client_id>:<secret>)

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

    POST https://host/STS/oauth/token HTTP/1.1
    Authorization: Basic dGVzdENsaWVudDo=
    Content-Type: application/x-www-form-urlencoded
    Host: host
    Content-Length: 180
    Expect: 100-continue
    
    grant_type=authorization_code&code=65e4322a9751cf9ba43012692ce02ec1&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob%3Aauto&resource=urn%3Acryptopro%3Adss%3Asignserver%3Asignserver
    

    В случае успешной аутентификации ответ будет содержать:

    • access_token - AccessToken, выпущенный Центром Идентификации DSS
    • token_type - Тип токена
    • expires_in - Время жизни токена в секундах

    Значение параметра access_token необходимо будет использовать при обращениях к Сервису Подписи.

    Примечание

    Данный access_token не даёт право Оператору DSS выполнять операции на Сервисе Подписи от имени пользователей. access_token может быть использован для получения Политики Сервиса Подписи.

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Length: 2268
    Content-Type: application/json; charset=utf-8
    Expires: -1
    
    {"access_token":"eyJ0eXAiOiJKV1Q ... LnS1sAunDSE1hh3A5n8W7lhPSM4z_VA","expires_in":300,"token_type":"Bearer"}
    
    HTTP-код Ошибка Описание
    400 invalid_client OAuth-клиент не зарегистрирован или неверно указан clienID
    400 unauthorized_client OAuth-клиент использует незарегистрированный сценарий аутентификации (Flow)
    400 invalid_request Неверно сформирован параметр resource
    400 invalid_grant Невалидный код авторизации.
    500 An error has occurred 1. Проверяющая сторона с идентификатором resource не зарегистрирована.

    Получение делегирующего AccessToken

    Для получения AccessToken для делегирования используется конечная точка oauth/token. Подробная информация по протоколу получения AccessToken для делегирования: OAuth 2.0 Token Exchange.

    Параметры запроса:

    • grant_type - тип разрешения, в данном сценарии равен urn:ietf:params:oauth:grant-type:token-exchange.
    • resource – идентификатор Сервиса Подписи.
    • actor_token - AccessToken, полученный на предыдущем шаге
    • actor_token_type – тип маркера доступа, должен иметь значение urn:ietf:params:oauth:token-type:jwt.
    • subject_token_type – тип маркера доступа, должен иметь значение urn:ietf:params:oauth:token-type:jwt.
    • subject_token – неподписанный JWT-токен, содержащий логин управляемого пользователя.

    В декодированном виде subject_token имеет вид:

    {
        "alg": "none",
        "typ": "JWT"
    }.
    {
        "unique_name": "mydss",
        "nbf": 1488312889,
        "exp": 1488316489,
        "iat": 1488312889
    }
    .
    

    Пример кодирования JWT-токена можно посмотреть по ссылке.

    Первая часть (до точки) называется header, вторая – payload. Для получения закодированного значения необходимо выполнить следующее преобразование:

    Base64UrlEncode(Utf8GetBytes(header)) + “.” + Base64UrlEncode(Utf8GetBytes(payload)) + “.” 
    
    Внимание!

    Символ “.” в конце получившегося значения является обязательным.

    В заголовке Authorization HTTP-запроса клиент должен передать идентификатор OAuth-клиента и секрет (если используется): Authorization: Basic Base64(<client_id>:<secret>)

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

    POST https://host/STS/oauth/token HTTP/1.1
    Authorization: Basic dGVzdENsaWVudDo=
    Content-Type: application/x-www-form-urlencoded
    Host: host
    Content-Length: 2529
    Expect: 100-continue
    
    grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Atoken-exchange&actor_token=eyJ0eXAiOiJKV1QiLCJhbGc ... E1hh3A5n8W7lhPSM4z_VA&actor_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt&subject_token=e30.eyJ1bmlxdWVfbmFtZSI6Im15ZHNzIn0.&subject_token_type=urn%3Aietf%3Aparams%3Aoauth%3Atoken-type%3Ajwt&resource=urn%3Acryptopro%3Adss%3Asignserver%3Asignserver
    

    В случае успешной аутентификации ответ будет содержать:

    • access_token - делегирующий AccessToken, выпущенный Центром Идентификации DSS
    • token_type - Тип токена
    • expires_in - Время жизни токена в секундах

    Значение параметра access_token необходимо будет использовать при обращениях к Сервису Подписи.

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

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Length: 2475
    Content-Type: application/json; charset=utf-8
    Expires: -1
    
    {"access_token":"eyJ0eXAiOiJKV1QiL ... hOX-7aUneD_po8p5uD3nJGQ5VIHJHiwg4vA","expires_in":300,"token_type":"Bearer"}
    

    Получение Политики Сервиса Подписи

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

    GET https://host/SignServer/rest/api/policy HTTP/1.1
    Authorization: Bearer eyJ0eXAiOiJK ... K0ePGIpg
    Host: host
    

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

    HTTP/1.1 200 OK
    Content-Length: 4821
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.5
    Date: Mon, 03 Sep 2018 09:21:40 GMT
    
    {
    "CAPolicy":
    [{
        "ID":11,
        "Name":"Out of Band",
        "Active":true,
        "AllowUserMode":false,
        "SNChangesEnable":true,
        "NamePolicy":
            [
                {"IsRequired":false,"Order":2,"OID":"1.2.840.113549.1.9.1","Name":"E-Mail","Value":null,"StringIdentifier":"E"},
                {"IsRequired":false,"Order":8,"OID":"1.2.643.3.131.1.1","Name":"ИНН","Value":null,"StringIdentifier":"INN"},
                {"IsRequired":false,"Order":4,"OID":"2.5.4.7","Name":"Населенный пункт","Value":null,"StringIdentifier":"L"},
                {"IsRequired":false,"Order":7,"OID":"1.2.643.100.1","Name":"ОГРН","Value":null,"StringIdentifier":"OGRN"},
                {"IsRequired":false,"Order":5,"OID":"2.5.4.10","Name":"Организация","Value":null,"StringIdentifier":"O"},
                {"IsRequired":false,"Order":6,"OID":"2.5.4.11","Name":"Подразделение","Value":null,"StringIdentifier":"OU"},
                {"IsRequired":false,"Order":3,"OID":"2.5.4.8","Name":"Регион","Value":null,"StringIdentifier":"S"},
                {"IsRequired":false,"Order":9,"OID":"2.5.4.6","Name":"Страна","Value":null,"StringIdentifier":"C"},
                {"IsRequired":true,"Order":1,"OID":"2.5.4.3","Name":"Общее имя","Value":null,"StringIdentifier":"CN"}
            ],
        "EKUTemplates":
        {
            "Временный сертификат администратора УЦ":["1.2.643.2.2.34.2","1.2.643.2.2.34.4","1.3.6.1.5.5.7.3.2"],
            "Временный сертификат оператора УЦ":["1.2.643.2.2.34.2","1.2.643.2.2.34.5","1.3.6.1.5.5.7.3.2"],
            "Временный сертификат пользователя УЦ":["1.2.643.2.2.34.2 ","1.3.6.1.5.5.7.3.2"],
            "Временный сертификат пользователя УЦ1":["1.2.643.2.2.34.6","1.3.6.1.5.5.7.3.2"],
            "Сертификат пользователя УЦ":["1.2.643.2.2.34.6","1.3.6.1.5.5.7.3.2"]
        },
        "CAType":"DSSOutOfBandEnroll",
        "ValidationMode":"CertificateAuthority"
    }],
    "CSPsPolicy":
    [
        {
            "ID":"67e6f39d-c6c5-4ce6-9535-4e22bae84786",
            "GroupID":"e8e67f9e-7eed-4116-ad98-20582e4d766e",
            "TypeID":2,
            "ProviderName":"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",
            "ProviderType":75,"KeyLength":512,"HashAlgorithms":["GOST R 34.11-94"],
            "Description":"GOST 2001"
        },
        {
            "ID":"60e9912c-68a8-4608-b1c2-0c6a074456e8",
            "GroupID":"648092d3-46a9-422a-9240-d32c58cc498b",
            "TypeID":2,
            "ProviderName":"Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider",
            "ProviderType":80,
            "KeyLength":512,
            "HashAlgorithms":["GR 34.11-2012 256"],
            "Description":"GOST 2012"
        }
    ],
    "ActionPolicy":[{"DisplayName":"Выпуск маркера (вход в ЦИ)","Uri":"http://dss.cryptopro.ru/identity/claims/action/Issue","Action":"Issue","MfaRequired":false},{"DisplayName":"Подпись документа","Uri":"http://dss.cryptopro.ru/identity/claims/action/SignDocument","Action":"SignDocument","MfaRequired":true},{"DisplayName":"Подпись пакета документов","Uri":"http://dss.cryptopro.ru/identity/claims/action/SignDocuments","Action":"SignDocuments","MfaRequired":false},{"DisplayName":"Расшифрование документа","Uri":"http://dss.cryptopro.ru/identity/claims/action/DecryptDocument","Action":"DecryptDocument","MfaRequired":false},{"DisplayName":"Создание запроса на сертификат","Uri":"http://dss.cryptopro.ru/identity/claims/action/CreateRequest","Action":"CreateRequest","MfaRequired":false},{"DisplayName":"Смена пин-кода закрытого ключа","Uri":"http://dss.cryptopro.ru/identity/claims/action/ChangePin","Action":"ChangePin","MfaRequired":false},{"DisplayName":"Обновление сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/RenewCertificate","Action":"RenewCertificate","MfaRequired":false},{"DisplayName":"Отзыв сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/RevokeCertificate","Action":"RevokeCertificate","MfaRequired":false},{"DisplayName":"Приостановление действия сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/HoldCertificate","Action":"HoldCertificate","MfaRequired":false},{"DisplayName":"Возобновление действия сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/UnholdCertificate","Action":"UnholdCertificate","MfaRequired":false},{"DisplayName":"Удаление сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/DeleteCertificate","Action":"DeleteCertificate","MfaRequired":false},{"DisplayName":"Доступ к закрытому ключу","Uri":"http://dss.cryptopro.ru/identity/claims/action/PrivateKeyAccess","Action":"PrivateKeyAccess","MfaRequired":false}],
    "PinCodeMode":"Allow",
    "TspServices":[{"Name":"TestTSP","Title":"TestTSP","Url":"http://TEST-DSS-W8R2/TSP/tsp.srf"}],
    "TransactionConfirmation":"NotSet",
    "AllowedSignatureTypes":["GOST3410","CMS","CAdES","XMLDSig","MSOffice","PDF"]}
    

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

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

    Согласно параметрам УЦ из Политики Сервиса Подписи Оператор формирует запроса на сертификат.

    POST https://host/SignServer/rest/api/requests HTTP/1.1
    Authorization: Bearer eyJ0eXAiOiJKV1 ... soOAiQOhtllgg
    Content-Type: application/json; charset=utf-8
    Host: host
    Content-Length: 167
    Expect: 100-continue
    
    {"AuthorityId":11,"PinCode":"","DistinguishedName":{"2.5.4.3":"mydss","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"}}
    

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

    HTTP/1.1 200 OK
    Content-Length: 719
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.5
    
    {
        "CertificateType": "ServerSide",
        "Base64Request": "MIIBPjCB7gIBADAdMQswCQYD ... 9MmKj3pHKCuhwuZCfzU+gKLUzWrQ==",
        "CertificateAuthorityID": 11,
        "CADisplayName": null,
        "DistName": "CN=mydss, C=RU",
        "Subject": "mydss",
        "Status": "PENDING",
        "ID": 23,
        "CARequestID": null,
        "CertificateID": 0,
        "RequestType": "Certificate",
        "GroupID": "e8e67f9e-7eed-4116-ad98-20582e4d766e"
    }
    

    Установка сертификата

    Сервер вернул запрос на сертификат в поле Base64Request. Запрос на сертификат необходимо передать в Удостоверяющий Центр для выпуска сертификата.

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

    POST https://host/SignServer/rest/api/certificates HTTP/1.1
    Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJHMDFHMjU2 ... PYErWVsOP9IM7oahdJ3iRg
    Content-Type: application/json; charset=utf-8
    Host: host
    Content-Length: 1154
    Expect: 100-continue
    
    {"Certificate":"MIIDHTCCAsygAwIBAgITEgAs1guTuGxFdbofF ... qJNHeSr2QvryU0IPn1jRE/VZnuEMf80PZ1\r\n"}
    

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

    HTTP/1.1 200 OK
    Content-Length: 1491
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.5
    
    {
        "CertificateType": "ServerSide",
        "ID": 14,
        "DName": "CN=mydss, C=RU",
        "CertificateBase64": "MIIDHTCCAsygAwIBAgITEgAs ... NHeSr2QvryU0IPn1jRE/VZnuEMf80PZ1",
        "Status": {
            "Value": "ACTIVE",
            "RevocationInfo": null,
            "PinCode": null,
            "ActiveCertId": 0
        },
        "IsDefault": false,
        "CertificateAuthorityID": 11,
        "CspID": "e8e67f9e-7eed-4116-ad98-20582e4d766e",
        "HashAlgorithms": ["GOST R 34.11-94"],
        "ProviderName": null,
        "ProviderType": 0,
        "PrivateKeyNotBefore": null,
        "PrivateKeyNotAfter": null,
        "HasPin": false,
        "FriendlyName": ""
    }
    
    HTTP-код Ошибка Описание
    400 invalid_certificate_format Сертификат имеет неверный формат.
    Например, сертификат передан с заголовками.

    Выпуск сертификата Пользователем DSS

    Аутентификация пользователя на Центре Идентификации

    В примере рассматривается авторизация с использованием учётных данных пользователя (логин/пароль). Подробная информация по протоколу аутентификации: The OAuth 2.0 Authorization Framework

    Параметры запроса:

    • grant_type - тип разрешения, в данном сценарии равен password.
    • password – пароль пользователя.
    • resource – идентификатор Сервиса Подписи.

    В заголовке Authorization HTTP-запроса клиент должен передать идентификатор OAuth-клиента и секрет (если используется): Authorization: Basic Base64(<client_id>:<secret>)

    Примечание

    В примере значение параметр password оставлено пустым, так как пользователю в качестве первичной аутентификации назначен метод "Только Идентификация"

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

    POST https://host/STS/oauth/token HTTP/1.1
    Authorization: Basic dGVzdENsaWVudDo=
    Content-Type: application/x-www-form-urlencoded
    Host: host
    Content-Length: 101
    Expect: 100-continue
    Connection: Keep-Alive
    
    grant_type=password&username=mydss&password=&resource=urn%3Acryptopro%3Adss%3Asignserver%3Asignserver
    

    В случае успешной аутентификации ответ будет содержать:

    • access_token - AccessToken, выпущенный Центром Идентификации DSS
    • token_type - Тип токена
    • expires_in - Время жизни токена в секундах

    Значение параметра access_token необходимо будет использовать при обращениях к Сервису Подписи и Сервису Подтверждения Операций.

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

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Pragma: no-cache
    Content-Length: 2017
    Content-Type: application/json; charset=utf-8
    Expires: -1
    
    {
        "access_token":"eyJ0eXAiOiJKV ... 5Wti-H8CeXycwB6A",
        "expires_in":300,
        "token_type":"Bearer"
    }
    

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

    HTTP-код Ошибка Описание
    400 invalid_client OAuth-клиент не зарегистрирован или неверно указан clienID
    400 unauthorized_client OAuth-клиент использует незарегистрированный сценарий аутентификации (Flow)
    400 invalid_request Неверно сформирован параметр resource
    500 An error has occurred 1. Проверяющая сторона с идентификатором resource не зарегистрирована.

    Получение Политики Сервиса Подписи

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

    GET https://host/SignServer/rest/api/policy HTTP/1.1
    Authorization: Bearer eyJ0eXAiOiJK ... K0ePGIpg
    Host: host
    

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

    HTTP/1.1 200 OK
    Content-Length: 4821
    Content-Type: application/json; charset=utf-8
    Server: Microsoft-IIS/7.5
    Date: Mon, 03 Sep 2018 09:21:40 GMT
    
    {
    "CAPolicy":
    [{
        "ID":11,
        "Name":"Out of Band",
        "Active":true,
        "AllowUserMode":false,
        "SNChangesEnable":true,
        "NamePolicy":
            [
                {"IsRequired":false,"Order":2,"OID":"1.2.840.113549.1.9.1","Name":"E-Mail","Value":null,"StringIdentifier":"E"},
                {"IsRequired":false,"Order":8,"OID":"1.2.643.3.131.1.1","Name":"ИНН","Value":null,"StringIdentifier":"INN"},
                {"IsRequired":false,"Order":4,"OID":"2.5.4.7","Name":"Населенный пункт","Value":null,"StringIdentifier":"L"},
                {"IsRequired":false,"Order":7,"OID":"1.2.643.100.1","Name":"ОГРН","Value":null,"StringIdentifier":"OGRN"},
                {"IsRequired":false,"Order":5,"OID":"2.5.4.10","Name":"Организация","Value":null,"StringIdentifier":"O"},
                {"IsRequired":false,"Order":6,"OID":"2.5.4.11","Name":"Подразделение","Value":null,"StringIdentifier":"OU"},
                {"IsRequired":false,"Order":3,"OID":"2.5.4.8","Name":"Регион","Value":null,"StringIdentifier":"S"},
                {"IsRequired":false,"Order":9,"OID":"2.5.4.6","Name":"Страна","Value":null,"StringIdentifier":"C"},
                {"IsRequired":true,"Order":1,"OID":"2.5.4.3","Name":"Общее имя","Value":null,"StringIdentifier":"CN"}
            ],
        "EKUTemplates":
        {
            "Временный сертификат администратора УЦ":["1.2.643.2.2.34.2","1.2.643.2.2.34.4","1.3.6.1.5.5.7.3.2"],
            "Временный сертификат оператора УЦ":["1.2.643.2.2.34.2","1.2.643.2.2.34.5","1.3.6.1.5.5.7.3.2"],
            "Временный сертификат пользователя УЦ":["1.2.643.2.2.34.2 ","1.3.6.1.5.5.7.3.2"],
            "Временный сертификат пользователя УЦ1":["1.2.643.2.2.34.6","1.3.6.1.5.5.7.3.2"],
            "Сертификат пользователя УЦ":["1.2.643.2.2.34.6","1.3.6.1.5.5.7.3.2"]
        },
        "CAType":"DSSOutOfBandEnroll",
        "ValidationMode":"CertificateAuthority"
    }],
    "CSPsPolicy":
    [
        {
            "ID":"67e6f39d-c6c5-4ce6-9535-4e22bae84786",
            "GroupID":"e8e67f9e-7eed-4116-ad98-20582e4d766e",
            "TypeID":2,
            "ProviderName":"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",
            "ProviderType":75,"KeyLength":512,"HashAlgorithms":["GOST R 34.11-94"],
            "Description":"GOST 2001"
        },
        {
            "ID":"60e9912c-68a8-4608-b1c2-0c6a074456e8",
            "GroupID":"648092d3-46a9-422a-9240-d32c58cc498b",
            "TypeID":2,
            "ProviderName":"Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider",
            "ProviderType":80,
            "KeyLength":512,
            "HashAlgorithms":["GR 34.11-2012 256"],
            "Description":"GOST 2012"
        }
    ],
    "ActionPolicy":[{"DisplayName":"Выпуск маркера (вход в ЦИ)","Uri":"http://dss.cryptopro.ru/identity/claims/action/Issue","Action":"Issue","MfaRequired":false},{"DisplayName":"Подпись документа","Uri":"http://dss.cryptopro.ru/identity/claims/action/SignDocument","Action":"SignDocument","MfaRequired":true},{"DisplayName":"Подпись пакета документов","Uri":"http://dss.cryptopro.ru/identity/claims/action/SignDocuments","Action":"SignDocuments","MfaRequired":false},{"DisplayName":"Расшифрование документа","Uri":"http://dss.cryptopro.ru/identity/claims/action/DecryptDocument","Action":"DecryptDocument","MfaRequired":false},{"DisplayName":"Создание запроса на сертификат","Uri":"http://dss.cryptopro.ru/identity/claims/action/CreateRequest","Action":"CreateRequest","MfaRequired":false},{"DisplayName":"Смена пин-кода закрытого ключа","Uri":"http://dss.cryptopro.ru/identity/claims/action/ChangePin","Action":"ChangePin","MfaRequired":false},{"DisplayName":"Обновление сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/RenewCertificate","Action":"RenewCertificate","MfaRequired":false},{"DisplayName":"Отзыв сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/RevokeCertificate","Action":"RevokeCertificate","MfaRequired":false},{"DisplayName":"Приостановление действия сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/HoldCertificate","Action":"HoldCertificate","MfaRequired":false},{"DisplayName":"Возобновление действия сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/UnholdCertificate","Action":"UnholdCertificate","MfaRequired":false},{"DisplayName":"Удаление сертификата","Uri":"http://dss.cryptopro.ru/identity/claims/action/DeleteCertificate","Action":"DeleteCertificate","MfaRequired":false},{"DisplayName":"Доступ к закрытому ключу","Uri":"http://dss.cryptopro.ru/identity/claims/action/PrivateKeyAccess","Action":"PrivateKeyAccess","MfaRequired":false}],
    "PinCodeMode":"Allow",
    "TspServices":[{"Name":"TestTSP","Title":"TestTSP","Url":"http://TEST-DSS-W8R2/TSP/tsp.srf"}],
    "TransactionConfirmation":"NotSet",
    "AllowedSignatureTypes":["GOST3410","CMS","CAdES","XMLDSig","MSOffice","PDF"]}
    
    Back to top © ООО "КРИПТО-ПРО", 2000-2020