Сервис обнаружения
В одном домене (под доменом понимается некоторая физическая среда, стоящая за одним доменным именем) может быть установлено нексколько экземпляров DSS. В такой конфигурации пользователю может быть предоставлен выбор, к какому конкретному экземпляру подключиться для выполнения операции. Для принятия решения пользователь должен ознакомиться с описанием всех доступных экземпляров. Клиентская система может получить данное описание с помощью Сервиса обнаружения (Discovery Service).
Протокол WebFinger
Cервиса обнаружения использует протокол WebFinger (RFC7033).
Для получения информации о всех зарегистрированных экземплярах служб DSS клиент отправляет следующий HTTP запрос:
GET https://dss.cryptopro.ru/.well-known/webfinger
?resource=https%3A%2F%2Fdss.cryptopro.ru
В ответ сервер возвращает так называемый JSON описатель ресурса (Json Resource Descriptor, JRD). В данном случае ресурсом становится сам сервер (именно поэтому в качестве параметра resource передавлся URL адрес самого сервера):
[
{
"subject" : "https://dss.cryptopro.ru",
"links" : [
{
"title" :
{
"ru-RU" : "Тестовый Сервер Электронной Подписи КриптоПро",
"en-US" : "The Crypto-Pro Test Digital Signature Server"
},
"rel" : "http://dss.cryptopro.ru/signserver",
"href" : "https://dss.cryptopro.ru/SignServer/",
"properties" :
{
"http://dss.cryptopro.ru/sts" : "https://dss.cryptopro.ru/STS/",
"http://dss.cryptopro.ru/frontend" : "https://dss.cryptopro.ru/Frontend/"
}
},
{
"title" :
{
"ru-RU" : "Тестовый Сервер Электронной Подписи Lite КриптоПро",
"en-US" : "The Crypto-Pro Test Digital Signature Server Lite"
},
"rel" : "http://dss.cryptopro.ru/signserver",
"href" : "https://dss.cryptopro.ru/SignServerLite/",
"properties" :
{
"http://dss.cryptopro.ru/sts" : "https://dss.cryptopro.ru/STS/",
"http://dss.cryptopro.ru/frontend" : "https://dss.cryptopro.ru/Lite/"
"http://dss.cryptopro.ru/signserver-type" : "client"
}
},
{
"title" :
{
"ru-RU" : "Тестовый Центр Идентификации КриптоПро",
"en-US" : "The Crypto-Pro TestIdentity Provider"
},
"rel" : "http://dss.cryptopro.ru/sts",
"href" : "https://dss.cryptopro.ru/STS/"
},
{
"title" :
{
"ru-RU" : "Веб-интерфейс Сервиса Подписи КриптоПро",
"en-US" : "The Crypto-Pro Sign Service Web Interface"
},
"rel" : "http://dss.cryptopro.ru/frontend",
"href" : "https://dss.cryptopro.ru/Frontend/",
"properties" :
{
"http://dss.cryptopro.ru/sts" : "https://dss.cryptopro.ru/STS/",
"http://dss.cryptopro.ru/signserver" : "https://dss.cryptopro.ru/SignServer/"
}
},
{
"title" :
{
"ru-RU" : "Веб-интерфейс Сервиса Подписи КриптоПро Lite",
"en-US" : "The Crypto-Pro Sign Service Lite Web Interface"
},
"rel" : "http://dss.cryptopro.ru/frontend",
"href" : "https://dss.cryptopro.ru/Frontend/",
"properties" :
{
"http://dss.cryptopro.ru/sts" : "https://dss.cryptopro.ru/STS/",
"http://dss.cryptopro.ru/signserver" : "https://dss.cryptopro.ru/SignServerLite/"
}
}
]
}
]
JRD документ
JRD описывает некоторый ресурс (в данном случае сам сервер). Его основными элементами является свойство subject (являющееся идентификатором описываемой сущности; его значение может и не совпадать со значеним параметра resource, переданного в запросе) и набора связей (link). В данном случае под связью понимаются экземемпляры служб DSS, установленные на данном сервере.
Каждая связь характеризуется следующими параметрами:
- rel - тип отношения. В случае описания сервера DSS под типом понимаются различные типы сервисов DSS (Центр Идентификации, Сервис Подписи, Веб-интерфейс и т.д.)
- href - ссылка на экземпляр службы.
- title - отображаемое название экземпляра службы, может отличаться для разных языков.
- properties - словарь (ключ/значение) дополнительных свойств связи.
В JRD примере, представленном выше, содержится пять связей, соответствующих пяти службам DSS, развернутым на этом сервере (естетственно, что служб может быть развернуто больше, но администратор сервере решил описать только указанные в JRD).
Типы связей
Сервис обнаружения КриптоПро DSS оперирует следующими типами связей:
Идентификатор типа | Описание | Примечание |
---|---|---|
http://dss.cryptopro.ru/signserver |
Сервис подписи | href задает базовый адрес веб-приложения |
http://dss.cryptopro.ru/sts |
Центр Идентификации | href задает базовый адрес веб-приложения |
http://dss.cryptopro.ru/frontend |
Веб-интерфейс пользователя | href задает адрес веб-приложения |
Свойства связей
Свойства позволяют описать дополнительную информацию о связанной службе.
Например, свойство http://dss.cryptopro.ru/frontend
описывает адрес
веб-интерфейса пользователя, соответствующего данной службе Сервиса Подписи.
Сервис обнаружения КриптоПро DSS оперирует следующими типами свойств:
Идентификатор типа | Описание |
---|---|
http://dss.cryptopro.ru/signserver |
URL-адрес сервиса подписи |
http://dss.cryptopro.ru/sts |
URL адрес Центра Идентификацц |
http://dss.cryptopro.ru/frontend |
URL адрес веб-интерфейса |
http://dss.cryptopro.ru/signserver-type |
Режим работы сервиса подписи |
Свойство signserver-type
Данное свойство определяет режим работы экземпляра службы Сервиса Подписи КриптоПро DSS. Возможные значения
client
- Сервис Подписи работает в режиме КриптоПро DSS Lite, то есть с ключами, хранящимися на устройстве пользователя.server
- Сервис Подписи работает с "облачными" ключами. Если свойствоsignserver-type
не указано, используется это значение по умочланию.server-client
- Сервис Подписи работает в смешанном режиме.
Обработка JRD документа
Рассмотрим один из вариантов чтения JRD документа.
- Клиентское приложение (далее просто клиент) запрашивает у пользователя адрес сервера, к которому он хочет подключиться.
- Клиент отправляет запрос по протоколу WebFinger к указанному серверу, указывая в качестве параметра resource адрес сервера.
- Получив в ответ JRD описание, клиент находит в нем связи с типом
rel=http://dss.cryptopro.ru/signserver
, тем самым перечисляя все установленные на этом сервере экземпляры службы Сервиса Подписи. - Клиент отображает пользователю найденные службы, показывая в списке
их понятное описание (
title
). - После того, как пользователь выбрал экземпляр, клиент может получить URL-адрес
Центра Идентификации из свойства
http://dss.cryptopro.ru/sts
и сформировать запрос на авторизацию.
Получение конкретной связи
В запрос по протоколу WebFinger можно добавить параметр rel
с указанием
конкретного типа связи, который хочется получить. В этом случае сервер вернет
только запрошенные связи:
Запрос
GET https://dss.cryptopro.ru/.well-known/webfinger
?resource=https%3A%2F%2Fdss.cryptopro.ru
&rel=http%3A%2F%2Fdss.cryptopro.ru%2Fsignserver
Ответ
[
{
"subject" : "https://dss.cryptopro.ru",
"links" : [
{
"title" :
{
"ru-RU" : "Тестовый Сервер Электронной Подписи КриптоПро",
"en-US" : "The Crypto-Pro Test Digital Signature Server"
},
"rel" : "http://dss.cryptopro.ru/signserver",
"href" : "https://dss.cryptopro.ru/SignServer/",
"properties" :
{
"http://dss.cryptopro.ru/sts" : "https://dss.cryptopro.ru/STS/",
"http://dss.cryptopro.ru/frontend" : "https://dss.cryptopro.ru/Frontend/"
}
},
{
"title" :
{
"ru-RU" : "Тестовый Сервер Электронной Подписи Lite КриптоПро",
"en-US" : "The Crypto-Pro Test Digital Signature Server Lite"
},
"rel" : "http://dss.cryptopro.ru/signserver",
"href" : "https://dss.cryptopro.ru/SignServerLite/",
"properties" :
{
"http://dss.cryptopro.ru/sts" : "https://dss.cryptopro.ru/STS/",
"http://dss.cryptopro.ru/frontend" : "https://dss.cryptopro.ru/Lite/"
"http://dss.cryptopro.ru/signserver-type" : "client"
}
}
]
}
]
Установка и удаление сервиса обнаружения
Сервис обнаружения входит в состав дистрибутива DSS в виде
самораспаковывающегося архива dss-webfinger-{version}.exe
.
После распаковки архива необходмио установить HTTP модуль для IIS. Это делается с помощью следующих PowerShell командлетов:
# Импортируем PowerShell модуль.
Import-Module "<Путь установки>\PowerShell\CryptoPro.DSS.WebFinger\CryptoPro.DSS.WebFinger.psm1"
Add-WebFingerService -SiteName "Default Web Site"
Для удаление сервиса с сервера IIS необходимо выполнить следующие команды
# Импортируем PowerShell модуль.
Import-Module "<Путь установки>\PowerShell\CryptoPro.DSS.WebFinger\CryptoPro.DSS.WebFinger.psm1"
Remove-WebFingerService -SiteName "Default Web Site"
Если в каком-либо из командлетов не указать значение для параметра SiteName
,
то будет использовано значение по умолчанию Default Web Site
.
Заполнение JRD документа
После разворачивания сервиса в папке, где расположен веб-сайт
(для Default Web Site это C:\inetpub\wwwroot\.well-known\webfinger
)
появится файл registry.json
. Содержимое файла заполнено демонстрационными
данными (как в примере выше). Данный файл можно редактировать в любом текстовом
редакторе. Сразу после редактирования новые данные будут возвращены сервисом.