Сервис хранения CRL (CRLS)
Сервис хранения CRL (CRL Storage, CRLS) входит в состав КриптоПро SVS и представляет собой сервис, позволяющий получать информацию о наличии записи о сертификате в сохраненных ранее списках отозванных сертификатов (CRL).
Архитектура CRLS
CRLS в *nix-системах представляет собой набор сервисов под управлением systemd.
Взаимодействие с CRLS производится через веб-сервер. В данном руководстве рекомендована настройка веб-сервера cpnginx, входящего в состав СКЗИ "КриптоПро CSP 5.0", однако могут быть использованы и другие веб-серверы, например, nginx 1.18.0 и новее.
Конфигурирование CRLS производится при помощи командлетов. Командлеты могут быть выполнены при помощи утилиты конфигурирования CPShell (обязательно при использовании режима ЗПС в ОС СН Astra Linux SE Смоленск) либо в PowerShell. Установка ПО для конфигурирования описана в разделе установки.
Расположение файлов CRLS:
| Файлы | Расположение |
|---|---|
| Путь установки | /opt/cprosvs/crlssrv/ |
| Путь хранения журналов | /var/log/cprosvs/crlssrv/cprokey-crlssrv-{{Имя экземпляра сервиса}}*.log (cprokey-crlssrv-{{Имя экземпляра сервиса}}*.clef в случае использования структурированного журналирования) |
| Сервисные файлы | /etc/systemd/system/cprosvs-crlssrv-{{Имя экземпляра сервиса}}.service |
| Конфигурационные файлы | /etc/opt/cprosvs/crlssrv/{{Имя экземпляра сервиса при создании}}/. В каждой из папок находятся следующие файлы: * config.json - настройки экземпляра сервиса, * nginx.conf - конфигурация веб-сервера, включаемая в основной файл конфигурации cpnginx, * cprokey-{{Имя сервиса}}-{{Имя экземпляра сервиса при создании}}.service - файл сервиса (см. строку выше) |
| Файлы для конфигурации веб-сервера | * /etc/opt/cprosvs/crlssrv/{{Имя экземпляра сервиса при создании}}/nginx.conf - конфигурация веб-сервера, включаемая в основной файл конфигурации cpnginx, * /etc/opt/cprocsp/cpnginx/cpnginx.conf - файл конфигурации cpnginx |
| Временные файлы | /var/opt/cprosvs/{{Имя сервиса}}/{{Имя экземпляра сервиса при создании}}/ |
Имена сервисов и диапазоны портов:
| Сервис | Имя сервиса | Диапазон портов |
|---|---|---|
| CRLS | crlssrv | 62500-62999 |
Установка и развертывание
Примечание
Перед установкой убедитесь, что прочее ПО (основные пакеты КриптоПро SVS, КриптоПро CSP, PowerShell и т.д.) уже установлено и настроено согласно основной инструкции по установке и развертыванию КриптоПро SVS.
Установка
Перейдите в папку с дистрибутивом КриптоПро SVS cprosvs_*_amd64.tar.gz и распакуйте архив с дистрибутивом, после чего установите пакет
Сервиса хранения CRL.
tar -xf cprosvs_*.tar.gz -C /opt/tmp/svs
sudo dpkg -i cprosvs-crlssrv__XXX_amd64.deb
# Создайте сервисную учетную запись для CRLS и добавьте в соответствующую группу
sudo adduser --quiet --system --no-create-home $crlssrvaccname
sudo usermod -a -G crlssrv $crlssrvaccname
Настройка PowerShell
Запустите PowerShell и получите список доступных модулей:
sudo pwsh
get-module -Refresh -ListAvailable
В списке должен присутствовать модуль с названием CryptoPro.CrlStorage.PowerShell.
В случае если модуль отсутствует в списке, убедитесь, что файл профиля profile.ps1 существует и заполнен в соответствии
с инструкцией по настройке PowerShell
для КриптоПро SVS, а также что в данном файле присутствуют учетные данные для подключения к БД.
Создание и настройка экземпляра сервиса
1. Запустите PowerShell:
sudo pwsh
2. Объявите переменные с данными подключения к СУБД:
Для указания параметров подключения к СУБД используется структура SqlConnectionInfo, а именно следующие поля в ней:
ServiceAccountName- имя сервисной учетной записи для подключения к СУБД. Под этой учетной записью к СУБД будет подключаться служба компонента (пул приложений). У данной УЗ будут минимально необходимые права для функционирования сервиса. Указанные в данном поле данные заносятся в строку подключения.ServiceAccountPassword- пароль сервисной учетной записи для подключения к СУБД. Указанные в данном поле данные заносятся в строку подключения.AsUser- имя учетной записи с полными правами (Администратора СУБД) для подключения к СУБД. Указанные в данном поле данные используются только в момент разворачивания экземпляра для подключения к СУБД, в строку подключения не заносятся (в настройках сервиса не сохраняются), но при этом должны быть добавлены в переменные среды (см. раздел про настройку PowerShell).AsUserPassword- пароль учетной записи с полными правами (Администратора СУБД) для подключения к СУБД. Указанные в данном поле данные используются только в момент разворачивания экземпляра, в строку подключения не заносятся (в настройках сервиса не сохраняются), но при этом должны быть добавлены в переменные среды (см. раздел про настройку PowerShell).
#Подключение к СУБД
$sql_address = "*.*.*.*:*" # IP-адрес сервера с PostgreSQL и TSP-порт, на котором по умолчанию прослушиваются соединения
$ServiceAccountName = "postgres" #Имя сервисной учетной записи для подключения к СУБД
$ServiceAccountPassword = "***" #Пароль сервисной учетной записи для подключения к СУБД
$AsUser = "postgres-adm" #Имя Администратора СУБД
$AsUserPassword = "***" #Пароль Администратора СУБД
3. Объявите переменные с наименованием создаваемого экземпляра и папкой для хранения CRL:
$crlsAppName = 'CrlStorage'
$crlsFolderPath = '/var/opt/cprosvs/crlssrv/$crlsAppName/FileStorage'
4. Сформируйте строку подключения к БД экземпляра:
$connInfo = New-CrlsSqlConnectionInfo `
-ServerName $sql_address `
-DatabaseName $crlsAppName `
-DbType postgresql `
-AsUser $AsUser `
-AsUserPassword $AsUserPassword `
-ServiceAccountName $ServiceAccountName `
-ServiceAccountPassword $ServiceAccountPassword
5. Создайте экземпляр сервиса CRLS:
Add-CrlsInstance `
-ConnectionInfo $connInfo `
-ApplicationName $crlsAppName `
-DisplayName $crlsAppName `
-ServiceAccountName $crlssrvaccname
6. Укажите папку для хранения CRL.
Необходимо убедиться, что у сервисной учетной записи
CRLS $crlssrvaccname есть права на чтение и запись в эту папку. В случае если будет использоваться
импорт CRL в указанную папку при помощи командлетов, необходимо также убедиться, что права на чтение и запись также имеются у
учетной записи, из-под которой будет запущен PowerShell.
Set-CrlsProperties -DisplayName $crlsAppName -FileStorageFileSystemFolderPath $crlsFolderPath
См. также:
Донастройка веб-сервера (*nix)
Донастройка веб-сервера требуется в случае использования cpnginx.
Необходимо добавить ссылку на файл конфигурации сервиса (include /etc/opt/cprosvs/crlssrv/*/nginx.conf) в
основной конфигурационный файл cpnginx (/etc/opt/cprocsp/cpnginx/cpnginx.conf).
Ссылка размещается в контексте server на нужном порту (например, там же, где и остальные сервисы КриптоПро SVS).
Пример конфигурации (фрагмент)
server {
listen 443;
sspi_verify_client off;
sspi_certificate <serial_number>; #Серийный номер ГОСТ-сертификата веб-сервера
#sspi_certificate <serial_number>; #Опционально, серийный номер RSA-сертификата веб-сервера
include mime.types;
server_name dns-name;
include /etc/opt/cprosvs/vssrv/*/nginx.conf;
include /etc/opt/cprosvs/vsfe/*/nginx.conf;
include /etc/opt/cprosvs/crlssrv/*/nginx.conf;
}
Активация сервисов
Выполните активацию/перезапуск сервисов при помощи следующих команд:
#Активация nginx (если настраивался впервые)
sudo systemctl enable --now cpnginx.service
#Перезапуск nginx (если выполнялась донастройка)
sudo systemctl restart cpnginx.service
#Активация сервиса CRLS
sudo systemctl start "cprosvs-crlssrv-$crlsAppName"
Проверка состояния сервиса
В случае если сервис работает
штатно, при обращении к его конечной точке при помощи POST/GET-запроса будет возвращен HTTP-ответ с
кодом StatusCode = "200" и JSON-Content: {"status": "Healthy"}.
https://$hostname/$crlsAppName/health
Перезапуск сервиса
В случае изменения конфигурации экземпляра сервиса необязательно перезапускать его на уровне операционной системы. Возможно использовать следующую команду:
Restart-CrlsInstance -DisplayName $crlsAppName
Импорт CRL
Импорт CRL через веб-интерфейс
Сервис хранения CRL предоставляет веб-интерфейс, отркывающий доступ к следующим функциям:
- проверка состояния сервиса;
- загрузка CRL и архивов CRL в базу данных ;
- отображение диаграммы покрытия CRL.
Веб-интерфейс доступен по следующей ссылке:
http(s)://<host>/<AppName>/
Диаграмма покрытия CRL доступна по следующей ссылке:
http(s)://<host>/<AppName>/pages/coverage/
Диаграмма покрытия CRL представляет собой тепловую карту количества файлов CRL в хранилище с разбивкой по издателям CRL и временным периодам. Доступен моноцветный и цветной режим представления покрытия CRL.
Импорт CRL при помощи командлетов
Импорт CRL может быть выполнен при помощи следующих командлетов:
Import-CrlsArchiveFile- Импорт архива CRLImport-CrlsArchivesFolderRoutine- Импорт CRL из выбранной папки (подходит для большого объема файлов)Import-CrlsFile- Импорт файла CRL
1. Командлет Import-CrlsArchiveFile позволяет выбрать zip-архив с файлами CRL (путь к архиву указывается в параметре -FilePath).
Дополнительно может потребоваться указать имя экземпляра сервиса (-DisplayName).
Import-CrlsArchiveFile -FilePath <string> [-DisplayName]
2. Командлет Import-CrlsArchivesFolderRoutine перебирает архивы, загружает найденные в них CRL,
пишет логи и мини-отчеты об обработанных архивах и переносит обработанные архивы в папку -ProcessedArchivesFolder.
Перед запуском комадлета рекомендуется выполнить следующую команду:
$InformationPreference = "Continue"
После ввода данной команды при работе комадлета в консоли будет выведена диагностическая информация о процессе загрузки CRL.
Import-CrlsArchivesFolderRoutine `
#Имя экземпляра
-DisplayName $appName `
#Путь к папке с zip-архивами, подлежащими загрузке
-InputFolder $inputFolder `
#Путь к папке, в которую будут помещены zip-архивы, обработанные без ошибок импорта
-ProcessedArchivesFolder $processedFolder `
#Путь к папке, в которую будут помещены логи загрузки zip-архивов, обработанных без ошибок импорта
-ProcessedLogsFolder $processedLogsFolder `
#Путь к папке, в которую будут помещены логи загрузки zip-архивов, обработанных с ошибками импорта
-FailedLogsFolder $failedLogsFolder `
#Путь к папке, в которую будут помещены логи загрузки zip-архивов, обработанных с ошибками импорта
-TreatAsWarnings crl_duplicate `
#Извлекать ли проблемные CRL в папку с логами загрузки zip-архивов, обработанных с ошибками импорта
-WriteFailedCrlsToLogs
Параметр -TreatAsWarnings позволяет передать массив ошибок, которые стоит считать предупреждениями,
не помечая весь архив как обработанный с ошибками.
crl_archive_file_broken- Невозможно распознать файл как файл zip-архива,crl_duplicate- CRL уже содержится в хранилище сервиса,crl_file_invalid- Неверный формат файла CRL (например, дата начала больше даты окончания действия),crl_archive_file_empty- Содержимое архива не передано или имеет пустое значение,crl_file_broken- Невозможно распознать файл как файл CRL,crl_type_not_supported- Неподдерживаемый тип CRL,crl_archive_file_invalid- Архив с файлами не является архивом с CRL,crl_file_empty- Содержимое файла CRL не передано или имеет пустое значение.
Дополнительно в целях автоматизации импорта CRL в командлете может быть передан параметр -PassThru,
позволяющий передать информацию о импортированных CRL по PowerShell pipeline.
Информация об импортированных CRL представляет собой группы файлов CRL, сгруппированных по
коду результата success или одному из ошибочных, перечисленных выше. Каждая группа имеет следующую структуру:
| Параметр | Тип | Описание |
|---|---|---|
| ResultCode | string | Результат, с которым были обработаны все файлы в этой группе |
| Count | int | Количество файлов в группе |
| Crls | List<string> | Список имен файлов в группе |
3. Командлет Import-CrlsFile позволяет загрузить файл CRL (путь к файлу указывается в параметре -FilePath).
Дополнительно может потребоваться указать имя экземпляра сервиса (-DisplayName).
Интеграция с SVS
КриптоПро SVS позволяет осуществлять проверку подписи на момент времени, указанный в метке доверенного времени (МДВ), если таковая доступна. Для этого сервису проверки подписи необходим источник данных о статусах соответствующих сертификатов. В дистрибутив КриптоПро SVS входит плагин-коннектор, позволяющий использовать компонент Сервис хранения CRL в качестве такого источника.
Настройка плагина-коннектора к Сервису хранения CRL выполняется при помощи следующей команды:
Add-VsRevProvPlugin -Assembly CryptoPro.Plugins.Revocation.CrlStorage.dll -ClassName CryptoPro.Plugins.Revocation.CrlStorage.RevocationPlugin -Parameters @{“StorageAddress”=”http://<hostname>/CrlStorageTimeLink/Api/”}
Далее необходимо определить требования к процессу проверки подписи:
- в случае если иногда требуется проводить проверку подписи на момент времени, указанный в МДВ, необходимо в параметрах запроса на проверку подписи передавать флаг
"VerifyInThePast":"true"; - в случае если всегда требуется проводить проверку подписи на момент времени, указанный в МДВ, сервис проверки подписи необходимо переключить в соответствующий режим.
Все подписи формата CAdES-T будут проверены на данный момент времени - как загруженные через веб-интерфейс, так и через REST API (вне зависимости от наличия флага
VerifyInThePast).
Переключение сервиса проверки подписи в режим проверки подписи на момент времени из МДВ:
Set-VsProperties -CadesTVerificationInThePast 1
Дополнительные настройки сервиса
Настройка Сервиса хранения CRL производится при помощи утилиты конфигурирования PowerShell.
Список командлетов, входящих в состав модуля CryptoPro.CrlStorage.PowerShell, можно получить, выполнив команду:
Get-Command -Module CryptoPro.CrlStorage.PowerShell -CommandType Cmdlet
Для получения справки по каждому из командлетов выполните следующую команду:
Get-help <имя_командлета>
# Например:
Get-Help Import-CrlsArchivesFolderRoutine -Full
Командлеты сервиса:
Работа с экземпляром сервиса
| Командлет | Описание |
|---|---|
| Add-CrlsInstance | Добавление экземпляра сервиса |
| Get-CrlsInstance | Получение информации об экземпляре |
| Remove-CrlsInstance | Удаление экземпляра сервиса |
| Restart-CrlsInstance | Перезапуск службы сервиса |
| Update-CrlsInstance | Обновление конфигурации экземпляра (например, иногда требуется после обновления установочного пакета) |
Основные параметры командлета Add-CrlsInstance:
-ApplicationName- Имя создаваемого веб-приложения,-ConnectionInfo- Строка подключения к БД,-DbName- Имя БД (если не заполнена строка подключения к БД),-DbType- Тип БД (доступно только значениеpostgresql) (если не заполнена строка подключения к БД),-DisplayName- Имя экземпляра сервиса,-ListenPort- Порт сервиса из диапазона 62500-62999,-ServiceAccountName- Имя сервисной учетной записи (только для *nix),-SkipServiceRegistration- Пропуск регистрации службы в systemd (если планируется ручное создание).-SqlServerName- IP-адрес сервера с PostgreSQL и TSP-порт, на котором по умолчанию прослушиваются соединения,
В командлете Remove-CrlsInstance доступны параметры -DeleteDB, если требуется также удалить базу данных
сервиса, и -Force - если требуется удаление без дополнительного подтверждения в консоли.
Настройки сервиса
| Командлет | Описание |
|---|---|
| Get-CrlsProperties | Получение настроек сервиса |
| Get-CrlsRegistryProperties | Получение строки подключения к БД |
| New-CrlsSqlConnectionInfo | Добавление строки подключения к БД |
| Set-CrlsProperties | Основные настройки сервиса |
| Set-CrlsRegistryProperties | Редактирование строки подключения к БД |
Основные параметры командлета New-CrlsSqlConnectionInfo:
-AccountType- Имя создаваемого веб-приложения,-AdditionalParameters- Дополнительные параметры подключения,-AsUser- Имя Администратора СУБД,-AsUserPassword- Пароль Администратора СУБД,-BeginUseEmpty- Использовать существующую пустую БД,-CommandTimeoutSeconds- Таймаут выполнения SQL-запросов во время миграции в секундах,-CreateBackUp- Создавать бекап базы данных перед обновлением,-CreateLogin- Создавать SQL-логин автоматически,-DatabaseName- Имя БД,-DbType- Тип БД (доступно только значениеpostgresql),-RepairDatabaseChecksums- Восстановить контрольные суммы при обновлении БД,-RestoreAccessModeAfterError- Будет ли БД возвращена в MULTI_USER режим на время обновления,-ServerName- IP-адрес сервера с PostgreSQL и TSP-порт, на котором по умолчанию прослушиваются соединения,-ServiceAccountName- Имя сервисной учетной записи для подключения к СУБД,-ServiceAccountPassword- Пароль сервисной учетной записи для подключения к СУБД,-SkipCreateLogin- Не создавать SQL-логин автоматически,-SkipValidation- Не проверять адрес SQL-сервера,-TraceLogPath- Путь для записи трассировки обновления базы данных,-UseExclusiveAccessMode- Будет ли БД переведена в SINGLE_USER режим на время обновления,-UseExistingDB- Использовать существующую базу данных,-UseNetworkService- Использовать учетную запись NetworkService в качестве сервисной учетной записи.
Основные параметры командлета Set-CrlsProperties:
-ArchiveUploadingAcquiredMemoryBytes- Количество оперативной памяти в байтах, которое не должен превышать деархиватор при извлечении CRL в память во время загрузки архива (может использоваться для ускорения загрузки CRL на высокопроизводительных серверах),-ArchiveUploadingMaxFileParallelism- Максимальное количество параллельных задач при записи файлов CRL в хранилище файлов. Обычно это значение ограничивается сверху максимальным количеством потоков записи на файловую систему (может использоваться для ускорения загрузки CRL на высокопроизводительных серверах),-ArchiveUploadingMaxMetadataParallelism- Максимальное количество параллельных задач при записи метаданных CRL в хранилище метаданных. Обычно это значение ограничевается сверху разрешенным количеством одновременных подключений к базе данных,-DisplayName- Имя экземпляра сервиса,-FileStorageFileSystemFolderPath- Путь к папке файлового хранилища CRL на файловой системе,-UpdateCrlFileWhileUploadDuplicate- Проверять ли наличие файла CRL в хранилище при загрузке в случае нахождения дубликата в целях обновления/восстановления файла,-VerifyCrlSignature- Проверять ли подпись CRL при загрузке.
Основные параметры командлета Set-CrlsRegistryProperties:
-DisplayName- Имя экземпляра сервиса,-DbConnection- Строка подключения к БД,-DbType- Тип БД (доступно только значениеpostgresql).
Импорт CRL
| Командлет | Описание |
|---|---|
| Import-CrlsArchiveFile | Импорт архива CRL |
| Import-CrlsArchivesFolderRoutine | Импорт CRL из выбранной папки (подходит для большого объема файлов) |
| Import-CrlsFile | Импорт файла CRL |
Основные параметры командлета Import-CrlsArchiveFile:
-DisplayName- Имя экземпляра сервиса,-FilePath- Путь к zip-архиву с файлами CRL.
Основные параметры командлета Import-CrlsArchivesFolderRoutine:
-DisplayName- Имя экземпляра сервиса,-FailedLogsFolder- Путь к папке, в которую будут помещены логи загрузки zip-архивов, обработанных с ошибками импорта,-InputFolder- Путь к папке с zip-архивами, подлежащими загрузке,-PassThru- Передавать информацию о загруженных CRL далее по PowerShell pipeline.-ProcessedArchivesFolder- Путь к папке, в которую будут помещены zip-архивы, обработанные без ошибок импорта,-ProcessedLogsFolder- Путь к папке, в которую будут помещены логи загрузки zip-архивов, обработанных без ошибок импорта,-TreatAsWarnings- Путь к папке, в которую будут помещены логи загрузки zip-архивов, обработанных с ошибками импорта,-WriteFailedCrlsToLogs- Извлекать ли проблемные CRL в папку с логами загрузки zip-архивов, обработанных с ошибками импорта,
Подробнее о применении командлета см. Импорт CRL.
Основные параметры командлета Import-CrlsFile:
-DisplayName- Имя экземпляра сервиса,-FilePath- Путь к файлу CRL.
Журналирование
Журналирование экземпляра выполняется при помощи следующих командлетов. Настройка журналирования идентична настройкам, описанным для, например, сервиса Ключ Lite.
| Командлет | Описание |
|---|---|
| Add-CrlsLoggingRule | Добавление правила журналирования |
| Get-CrlsLoggingProperties | Получение основных настроек журналирования |
| Get-CrlsLoggingRule | Получение информации о правиле журналирования |
| Remove-CrlsLoggingRule | Удаление правила журналирования |
| Set-CrlsLoggingProperties | Основные настройки журналирования |
| Set-CrlsLoggingRule | Настройки правила журналирования |
REST API Сервиса хранения CRL
REST-интерфейс предоставляет конечные точки для доступа к следующим функциям Сервиса Проверки Подписи:
Взаимодействие с REST API Сервиса хранения CRL осуществляется при помощи http-запросов
к нужной конечной точке. Общий префикс для всех конечных точек сервиса:
https://<hostname>/<ApplicationName>/api, где
<hostname>– адрес сервера, на котором расположен экземпляр веб-приложения Сервиса хранения CRL,<ApplicationName>– название веб-приложения Сервиса хранения CRL.
Входные параметры могут быть переданы в теле самого запроса. Все объекты передаются и возвращаются в формате JSON, списки возвращаются в виде массивов JSON объектов. Массивы байтов передаются в виде строк в кодировке Base64.
Конечная точка Crl
Метод UploadCrl
Метод позволяет загрузить файл CRL.
| Параметр | Значение |
|---|---|
| HTTP-метод | POST |
| Поддерживаемые типы содержимого | application/octet-stream, multipart/form-data |
| Путь | https://<hostname>/<ApplicationName>/api/Crl/UploadCrl |
| Заголовок | В случае типа содержимого application/octet-stream необходимо указывать заголовок X-Filename |
| Параметры | file - содержимое загружаемого архива CRL в теле запроса или multipart-данные |
| Возвращаемое значение | CrlUploadResponse - результат загрузки файла CRL |
Пример запроса
POST /<hostname>/<ApplicationName>/api/Crl/UploadCrl
Content-Type: application/octet-stream
X-Filename: ca.crl
Пример ответа
HTTP/1.1 200
{
"crlId": 0
}
Метод UploadCrlArchive
Метод позволяет загрузить архив CRL.
| Параметр | Значение |
|---|---|
| HTTP-метод | POST |
| Поддерживаемые типы содержимого | application/octet-stream, multipart/form-data |
| Путь | https://<hostname>/<ApplicationName>/api/Crl/UploadCrlArchive |
| Заголовок | В случае типа содержимого application/octet-stream необходимо указывать заголовок X-Filename |
| Параметры | file - содержимое загружаемого архива CRL в теле запроса или multipart-данные |
| Возвращаемое значение | CrlUploadArchiveResponse - результат загрузки архива CRL |
Пример запроса
POST /<hostname>/<ApplicationName>/api/Crl/UploadCrlArchive
Content-Type: application/octet-stream
X-Filename: ca.crl
Пример ответа
HTTP/1.1 200
{
"stats": {
"totalCount": 0,
"succeededCount": 0,
"failedCountByErrorCode": {
"additionalProp1": 0,
"additionalProp2": 0,
"additionalProp3": 0
}
},
"processedEntries": [
{
"fileName": "string",
"succeeded": true,
"error": {
"error": "string",
"error_description": "string"
},
"result": {
"crlId": 0
}
}
]
}
Метод GET crlId
Метод позволяет получить краткую информацию о CRL по идентификатору.
| Параметр | Значение |
|---|---|
| HTTP-метод | GET |
| Путь | https://<hostname>/<ApplicationName>/api/Crl/{crlId} |
| Параметры в строке запроса | crlId - идентификатор CRL |
| Возвращаемое значение | CrlInfo - информация о CRL |
Пример запроса
GET /<hostname>/<ApplicationName>/api/Crl/{{crlId}}
Пример ответа
HTTP/1.1 200
{
"metadata": {
"id": 0,
"issuerKeyIdentifier": "string",
"issuerName": "string",
"crlNumber": "string",
"baseCrlNumber": "string",
"issuingDistributionPointNames": [
"string"
],
"thisUpdate": 0,
"nextUpdate": 0,
"certificatesCount": 0,
"fileName": "string",
"fileSize": 0,
"verifiedAt": 0
}
}
Метод GET crlId/Content
Метод позволяет получить файл CRL по идентификатору.
| Параметр | Значение |
|---|---|
| HTTP-метод | GET |
| Путь | https://<hostname>/<ApplicationName>/api/Crl/{crlId}/Content |
| Параметры в строке запроса | crlId - идентификатор CRL |
| Возвращаемое значение | Тип Stream - содержимое файла CRL |
Пример запроса
GET /<hostname>/<ApplicationName>/api/Crl/{{crlId}}/Content
Пример ответа
HTTP/1.1 200
content-disposition: attachment; filename=2323_03.crl; filename*=UTF-8''2323_03.crl
content-type: application/octet-stream
documentData
Метод LookupCrl
Метод позволяет находить CRL на определенную дату по информации об издателе.
| Параметр | Значение |
|---|---|
| HTTP-метод | POST |
| Путь | https://<hostname>/<ApplicationName>/api/Crl/LookupCrl |
| Поддерживаемые типы содержимого | application/json |
| Параметры в теле запроса | CrlRequestLookupCrl - Запрос на поиск CRL |
| Возвращаемое значение | CrlLookupResponse - Ответ на запрос поиска CRL |
Пример запроса
POST /<hostname>/<ApplicationName>/api/Crl/LookupCrl
{
"IssuerName": "2.5.4.3=ФНС России, 2.5.4.10=Федеральная налоговая служба, 2.5.4.9=\"ул. Неглинная, д. 23\", 2.5.4.7=Москва, 2.5.4.8=77 Москва, 2.5.4.6=RU, 1.2.643.3.131.1.1=007707329152, 1.2.643.100.1=1047707030513, 1.2.840.113549.1.9.1=mns10625@nalog.ru",
"IssuerKeyIdentifier": "de66ae143c9b762894a66897749776b95c800324",
"cdps": {
"distributionPoints": [
{
"altNames": [
{
"type": "OTHER_NAME",
"value": "string"
}
]
}
]
},
"validationTime": 1
}
Пример ответа
HTTP/1.1 200
{
"found": true,
"baseCrlId": 0,
"deltaCrlId": 0
}
Пример заполнения ответа, если CRL не найден:
HTTP/1.1 200
{
"found": false,
"baseCrlId": null,
"deltaCrlId": null
}
Метод LookupCrlEntry
Метод позволяет искать запись о сертификате в CRL до определенного момента времени по информации об издателе. Предоставляется информация о самой свежей записи из найденных.
| Параметр | Значение |
|---|---|
| HTTP-метод | POST |
| Путь | https://<hostname>/<ApplicationName>/api/Crl/LookupCrlEntry |
| Поддерживаемые типы содержимого | application/json |
| Параметры | CrlRequestLookupCrlEntry - Запрос на поиск записи об отзыве сертификата |
| Возвращаемое значение | CrlEntryLookupResponseEx - Ответ на запрос поиска записи об отзыве |
Пример запроса
POST /<hostname>/<ApplicationName>/api/Crl/LookupCrlEntry
{
"IssuerName": "2.5.4.3=ФНС России, 2.5.4.10=Федеральная налоговая служба, 2.5.4.9=\"ул. Неглинная, д. 23\", 2.5.4.7=Москва, 2.5.4.8=77 Москва, 2.5.4.6=RU, 1.2.643.3.131.1.1=007707329152, 1.2.643.100.1=1047707030513, 1.2.840.113549.1.9.1=mns10625@nalog.ru",
"IssuerKeyIdentifier": "de66ae143c9b762894a66897749776b95c800324",
"cdps": {
"distributionPoints": [
{
"altNames": [
{
"type": "OTHER_NAME",
"value": "string"
}
]
}
]
},
"validationTime": 0,
"certificateSerialNumber": "string"
}
Пример ответа
HTTP/1.1 200
{
"crl": {
"found": true,
"baseCrlId": 0,
"deltaCrlId": 0
},
"crlEntry": {
"found": true,
"revocationReason": 0,
"revocationDate": 0
}
}
Пример заполнения ответа, если не найдены ни CRL, ни запись об отзыве сертификата:
HTTP/1.1 200
{
"Crl":
{
"found": false,
"baseCrlId": null,
"deltaCrlId": null
},
"CrlEntry":
{
"found": false,
"RevocationReason": 0,
"RevocationDate": 0
},
}
Конечная точка CrlIssuer
Метод FilterCrlIssuers
Метод позволяет находить загруженных в БД издателей CRL.
| Параметр | Значение |
|---|---|
| HTTP-метод | POST |
| Путь | https://<hostname>/<ApplicationName>/api/CrlIssuer/FilterCrlIssuers |
| Поддерживаемые типы содержимого | application/json |
| Параметры в теле запроса | CrlRequestIssuerFilter - Запрос на поиск издателей CRL с фильтрацией |
| Возвращаемое значение | CrlIssuersInfo - Контейнер списка издателей CRL |
Пример запроса
POST /<hostname>/<ApplicationName>/api/CrlIssuer/FilterCrlIssuers
{
"issuerNameFilter": "string",
"issuerKeyIdentifierFilter": "string"
}
Пример ответа
HTTP/1.1 200
{
"issuers": [
{
"IssuerName": "2.5.4.3=ФНС России, 2.5.4.10=Федеральная налоговая служба, 2.5.4.9=\"ул. Неглинная, д. 23\", 2.5.4.7=Москва, 2.5.4.8=77 Москва, 2.5.4.6=RU, 1.2.643.3.131.1.1=007707329152, 1.2.643.100.1=1047707030513, 1.2.840.113549.1.9.1=mns10625@nalog.ru",
"IssuerKeyIdentifier": "de66ae143c9b762894a66897749776b95c800324",
"crlsCount": 0,
"crls": [
0
]
}
]
}
Метод DeleteCrlIssuer
Метод позволяет удалять загруженных в БД издателей CRL вместе с CRL и записями об отзывах сертификатов.
| Параметр | Значение |
|---|---|
| HTTP-метод | POST |
| Путь | https://<hostname>/<ApplicationName>/api/CrlIssuer/DeleteCrlIssuer |
| Поддерживаемые типы содержимого | application/json |
| Параметры в теле запроса | CrlRequestIssuerDelete - Запрос на удаление издателя CRL |
| Возвращаемое значение | - |
Пример запроса
POST /<hostname>/<ApplicationName>/api/CrlIssuer/DeleteCrlIssuer
{
"IssuerName": "2.5.4.3=ФНС России, 2.5.4.10=Федеральная налоговая служба, 2.5.4.9=\"ул. Неглинная, д. 23\", 2.5.4.7=Москва, 2.5.4.8=77 Москва, 2.5.4.6=RU, 1.2.643.3.131.1.1=007707329152, 1.2.643.100.1=1047707030513, 1.2.840.113549.1.9.1=mns10625@nalog.ru",
"IssuerKeyIdentifier": "de66ae143c9b762894a66897749776b95c800324",
}
Пример ответа
HTTP/1.1 200
Типы данных
Тип данных CrlUploadResponse
Структура CrlUploadResponse содержит информацию об об успешно загруженном файле CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| CrlId | int | Идентификатор загруженного CRL |
Тип данных CrlUploadArchiveResponse
Структура CrlUploadArchiveResponse содержит ответ на запрос загрузки zip-архива с файлами CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| Stats | CrlUploadArchiveResponseStats | Сводка по загруженным файлам CRL из содержимого архива |
| ProcessedEntries | IList<CrlUploadArchiveResponseEntry> | Детальная информация о загруженных файлах CRL из содержимого архива |
Тип данных CrlUploadArchiveResponseStats
Структура CrlUploadArchiveResponseStats содержит сводку по загруженным файлам CRL из содержимого архива.
| Поле | Тип | Описаниe |
|---|---|---|
| TotalCount | int | Количество обработанных файлов CRL из zip-архива |
| SucceededCount | int | Количество успешно загруженных файлов CRL из zip-архива |
| FailedCountByErrorCode | Dictionary<string, int> | Сводка по ошибкам загрузки файлов CRL (код ошибки + количество таких ошибок) |
Тип данных CrlUploadArchiveResponseEntry
Структура CrlUploadArchiveResponseEntry содержит детальную информацию о загруженных файлах CRL из содержимого архива.
| Поле | Тип | Описаниe |
|---|---|---|
| FileName | string | Имя файла CRL |
| Succeeded | bool | Удалось ли загрузить файл CRL |
| Error | ServiceErrorResponse | Информация об ошибке загрузки файла CRL. Данное поле заполняется в случае ошибки загрузки |
| Result | CrlUploadResponse | Информация об успешно загруженном файле CRL. Данное поле заполняется в случае успешной загрузки |
Информация об ошибке ServiceErrorResponse
| Поле | Тип | Описаниe |
|---|---|---|
| Error | string | Код ошибки |
| ErrorDescription | string | Описание ошибки |
Типовые ошибки сервиса:
| HTTP-код | Описание |
|---|---|
| 400 | Неверный запрос |
| 500 | Внутренняя ошибка сервера |
Тип данных CrlInfo
Структура CrlInfo содержит информацию о CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| Metadata | CrlMetadata | Краткая информация о CRL из БД |
| FileAvailable | bool | Доступен ли файл CRL для скачивания. Может быть недоступен в случае недоступности/неработоспособности хранилища файлов CRL |
Тип данных CrlMetadata
Структура CrlMetadata содержит краткую информацию о CRL из БД.
| Поле | Тип | Описаниe |
|---|---|---|
| Id | int | Идентификатор CRL внутри сервиса |
| IssuerKeyIdentifier | string | Идентификатор ключа издателя CRL |
| IssuerName | string | Различительное имя издателя CRL |
| CrlNumber | string | Номер CRL |
| BaseCrlNumber | string | Номер базового CRL (присутствует в Delta CRL) |
| IssuingDistributionPointNames | string[] | Имена точек распространения CRL |
| ThisUpdate | long | Время начала действия CRL (unix timestamp) |
| NextUpdate | long | Время окончания действия CRL (unix timestamp) |
| CertificatesCount | int | Количество записей об отзыве сертификатов |
| FileName | string | Имя загруженного файла CRL |
| FileSize | long | Размер загруженного файла CRL |
| VerifiedAt | long | Время проверки подписи CRL (unix timestamp). Отсутствует, если проверка не производилась. |
Тип данных CrlRequestLookupCrl
Структура CrlRequestLookupCrl содержит запрос на поиск CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| IssuerName | string | Различительное имя издателя CRL. Обязательный параметр |
| IssuerKeyIdentifier | string | Идентификатор ключа издателя CRL. Обязательный параметр |
| Cdps | CrlRequestLookupCdps | Информация о точках распространения CRL для дополнительной фильтрации. Необязательный параметр |
| ValidationTime | long | Момент времени, на который проверяется поиск подходящего CRL. Обязательный параметр |
Тип данных CrlRequestLookupCdps
Структура CrlRequestLookupCdps содержит информацию о точках распространения CRL для дополнительной фильтрации.
| Поле | Тип | Описаниe |
|---|---|---|
| DistributionPoints | CrlRequestLookupCdp[] | Информация о точке распространения CRL |
CrlRequestLookupCdp
| Поле | Тип | Описаниe |
|---|---|---|
| AltNames | CrlRequestLookupCdpAltName[] | Набор имен точек распространения CRL |
CrlRequestLookupCdpAltName
| Поле | Тип | Описаниe |
|---|---|---|
| Type | CdpAltNameTypes | Тип имени точки распространения CRL |
| Value | string | Значение имени точки распространения CRL |
CdpAltNameTypes
Тип имени точки распространения CRL в соответствии с RFC 5280.
| Тип | Значение |
|---|---|
| 1 | OTHER_NAME |
| 2 | RFC822_NAME |
| 3 | DNS_NAME |
| 4 | X400_ADDRESS |
| 5 | DIRECTORY_NAME |
| 6 | EDI_PARTY_NAME |
| 7 | URL |
| 8 | IP_ADDRESS |
| 9 | REGISTERED_ID |
Тип данных CrlLookupResponse
Структура CrlLookupResponse содержит ответ на запрос поиска CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| Found | bool | Был ли найден CRL по указанным в запросе параметрам |
| BaseCrlId | int | Идентификатор найденного CRL (если найден Full CRL, в поле будет помещен идентификатор Base CRL) |
| DeltaCrlId | int | Идентификатор найденного Delta CRL (если найден Full CRL, в поле будет помещен идентификатор Delta CRL) |
Пример заполнения ответа, если CRL не найден:
{
"found": false,
"baseCrlId": null,
"deltaCrlId": null
}
Тип данных CrlRequestLookupCrlEntry
Структура CrlRequestLookupCrlEntry содержит запрос на поиск записи об отзыве сертификата.
| Поле | Тип | Описаниe |
|---|---|---|
| IssuerName | string | Различительное имя издателя CRL. Обязательный параметр |
| IssuerKeyIdentifier | string | Идентификатор ключа издателя CRL. Обязательный параметр |
| Cdps | CrlRequestLookupCdps | Информация о точках распространения CRL для дополнительной фильтрации. Необязательный параметр |
| ValidationTime | long | Момент времени, на который проверяется поиск подходящего CRL. Обязательный параметр |
| CertificateSerialNumber | string | Серийный номер сертификата |
Тип данных CrlEntryLookupResponseEx
Структура CrlEntryLookupResponseEx содержит ответ на запрос поиска записи об отзыве сертификата.
| Поле | Тип | Описаниe |
|---|---|---|
| Crl | CrlLookupResponse | Информация о том, был ли найден CRL по указанным в запросе параметрам |
| CrlEntry | CrlEntryLookupResponse | Информация о том, была ли найдена запись об отзыве сертификата по указанным в запросе параметрам |
Тип данных CrlEntryLookupResponse
Структура CrlEntryLookupResponse содержит информацию о том, была ли найдена запись об отзыве сертификата по указанным в запросе параметрам.
| Поле | Тип | Описаниe |
|---|---|---|
| Found | bool | Была ли найдена запись об отзые сертификата по указанным в запросе параметрам |
| RevocationReason | int | Причина отзыва сертификата |
| RevocationDate | long | Дата отзыва сертификата |
Тип данных CrlRequestIssuerFilter
Структура CrlRequestIssuerFilter содержит запрос на поиск издателей CRL с фильтрацией.
| Поле | Тип | Описаниe |
|---|---|---|
| IssuerNameFilter | string | Фильтр различительного имени издателя. Необязательный параметр |
| IssuerRevocationReason | int | Фильтр идентификатора ключа издателя. Необязательный параметр |
Тип данных CrlIssuersInfo
Структура CrlIssuersInfo содержит контейнер для списка издателей CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| Issuers | IList<CrlIssuerInfo> | Список издателей CRL |
Тип данных CrlIssuerInfo
Структура CrlIssuerInfo содержит список издателей CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| IssuerName | string | Различительное имя издателя CRL |
| IssuerKeyIdentifier | string | Идентификатор ключа издателя CRL |
| CrlsCount | int | Количество CRL от этого издателя |
| Crls | int[] | Список идентификаторов CRL от этого издателя |
Тип данных CrlRequestIssuerDelete
Структура CrlRequestIssuerDelete содержит запрос на удаление издателя CRL.
| Поле | Тип | Описаниe |
|---|---|---|
| IssuerName | string | Различительное имя издателя CRL |
| IssuerKeyIdentifier | string | Идентификатор ключа издателя CRL |