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

    Настройка проверки формата сертификатов

    Сервис Проверки Подписи «КриптоПро SVS» позволяет настроить дополнительную проверку соответствия полей сертификата установленной форме.

    Проверка происходит на основании структуры полей, представленных в следующих правилах.

    • Версия (version). Версия сертификата должна быть не ниже 3.
    • Серийный номер (serial number). Проверяется наличие номера и отсутствие в нем недопустимых символов.
    • Алгоритм подписи (signature). В поле algorithm, входящем в состав поля signature, должен содержаться идентификатор используемого алгоритма подписи:
      • ГОСТ Р 34.10–2012 с ключом длиной 256 бит: "1.2.643.7.1.1.3.2", szOID_CP_GOST_R3411_12_256_R3410
      • ГОСТ Р 34.10–2012 с ключом длиной 512 бит: "1.2.643.7.1.1.3.3", szOID_CP_GOST_R3411_12_512_R3410
      • (для архивного хранения и проверки подписи) ГОСТ Р 34.10-2001: "1.2.643.2.2.3", szOID_CP_GOST_R3411_R3410EL
    • Имя издателя (issuer) — проверяется только наличие его в сертификате.
    • Дата и время начала действия сертификата (notBefore).
    • Дата и время окончания действия сертификата (notAfter).
    • Имя владельца сертификата (subject). Возможна проверка следующих компонентов имени владельца сертификата (компоненты имени проверяются на допустимые символы, длину, если такие требования имеются):
      • ФИО или наименование владельца (и другие сведения, если требуется) (commonName, title, surname, givenName)
      • Местонахождение (countryName, stateOrProvinceName, localityName, streetAddress)
      • СНИЛС (SNILS)
      • ОГРН (OGRN)
      • ОГРНИП (OGRNIP)
      • ИНН (INN)
      • ИНН юридического лица (ЮЛ) (INNLE)
      • совпадение общего имени и наименования организации (CN=O)
      • тип идентификации заявителя (identificationKind)
    • Открытый ключ (subjectPublicKeyInfo). Проверяется только наличие его в сертификате.
    • Дополнения (расширения) сертификата (Extensions). Проверяется только наличие следующих расширений в сертификате.
      • Authority Key Identifier, OID.2.5.29.35, идентификатор ключа УЦ.
      • Key Usage, OID.2.5.29.15, область использования ключа.
      • Certificate Policies, OID.2.5.29.32, политики сертификата. Для данного расширения проверяется содержимое в соответствии с требованиями, указанными в Приказе ФСБ РФ от 27 декабря 2011 г. N 795.
      • Subject Sign Tool, OID.1.2.643.100.111, сведения о средстве ЭП владельца сертификата.
      • Issuer Sign Tool, OID.1.2.643.100.112, сведения о средствах ЭП УЦ и средствах УЦ.
      • ExtendedKeyUsage, OID.2.5.29.37, расширенное использование ключа. Состав дополнения (расширения) зависит от информационной системы, в которой используется сертификат.
      • CDP, OID.2.5.29.31, точки распространения списков сертификатов, досрочно прекративших действие (CRL).
      • IdentificationKind, OID.1.2.643.100.114, идентификация заявителя,
      • privateKeyUsagePeriod, OID.2.5.29.16, срок действия ключа подписи.

    Проверка сертификата выполняется при помощи специального плагина. Для активации проверки сертификатов необходимо зарегистрировать плагин с помощью Windows PowerShell. После установки КриптоПро SVS плагин находится в директории <Путь установки>\Plugins\certverifiers\ и называется SVS.CertificateVerifier.Qualified.dll.

    Для регистрации и настройки плагина проверки формата сертификатов используются командлеты Add-VsCertificateVerifierPlugin, Get-VsCertificateVerifierPlugin, Remove-VsCertificateVerifierPlugin.

    Для настройки проверки того, что сертификаты выданы определенным УЦ, необходимо выполнение следующих действий:

    • зарегистрировать отпечатки корневых сертификатов в КриптоПро SVS. Работа с отпечатками производится при помощи командлетов Add-VsQualifiedCAThumbprints, Get-VsQualifiedCAThumbprints и Remove-VsQualifiedCAThumbprints. Если отпечатки не заданы, данная проверка сертификатов проводиться не будет.

    • установить корневые сертификаты УЦ в выделенное хранилище КриптоПро SVS. Хранилище создается автоматически при установке КриптоПро SVS и имеет название вида <Имя веб-приложения SVS>-TSL.

    Пример настройки плагина

    # Регистрация плагина и настройка пути к файлу TSL (Windows)
    Add-VsCertificateVerifierPlugin -Assembly SVS.CertificateVerifier.Qualified.dll -PluginDescription "Проверка сертификата на соответствие установленной форме" -Parameters @{'TSLPath'='C:\TSL.xml'}
    # Регистрация плагина и настройка пути к файлу TSL (*nix)
    Add-VsCertificateVerifierPlugin -Assembly CryptoPro.Plugins.VerificationService.CertificateVerifier.Qualified.dll -PluginDescription "Проверка сертификата на соответствие установленной форме" -Parameters @{'TSLPath'='/path_to/TSL.xml'}
    
    
    
    # Добавление отпечатков корневых сертификатов Минцифры РФ
    Add-VsQualifiedCAThumbprints -Thumbprint 4bc6dc14d97010c41a26e058ad851f81c842415a
    Add-VsQualifiedCAThumbprints -Thumbprint aff05c9e2464941e7ec2ab15c91539360b79aa9d
    Add-VsQualifiedCAThumbprints -Thumbprint 2f0cb09be3550ef17ec4f29c90abd18bfcaad63a
    

    Если плагин зарегистрирован и настроен, в веб-интерфейсе КриптоПро SVS при проверке сертификата будет выводиться дополнительная информация о соответствии его заданным правилам. При проверке ЭП также будет осуществляться проверка данного сертификата.

    Дополнительные параметры плагина:

    • LocationCheck – требовать обязательного наличия компонентов местонахождения (S, L, STREET). Возможные значения: true, false. Значение по умолчанию false;
    • OrganizationNameStrictCheck – требовать совпадения значений компонентов имени CN и O в сертификате. Возможные значения: true, false. Значение по умолчанию false;
    • INNforLECheckMode – режим проверки ИНН ЮЛ. Возможные значения: Any, Soft, Strict. Значение по умолчанию Soft.
      • Any – требуется присутствие INN и/или INNLE;
      • Soft – требуется присутствие INNLE; присутствие INN докускается;
      • Strict – требуется присутствие только INNLE.
    • TSLPath - полный путь к файлу TSL.
    • EnforcePrivateKeyUsagePeriodCheck - проверка срока действия ключа подписи. Возможные значения: true, false. Значение по умолчанию true. В случае значения true нарушение срока действия ключа подписи будет восприниматься плагином как ошибка, в случае false - как предупреждение;
    • GovernmentIssuerList - список издателей, чьи выданные сертификаты будут восприниматься как сертификаты госслужащего. В параметре необходимо указывать значения CN допустимых издателей через запятую;
    • PersonRdnExcludeList - компоненты имени, недопустимые для сертификатов, тип которых определен как сертификат физического лица. В параметре необходимо указывать список OID, разделенных запятой;
    • EnterpreneurRdnExcludeList - компоненты имени, недопустимые для сертификатов, тип которых определен как сертификат физического лица, являющегося индивидуальным предпринимателем. В параметре необходимо указывать список OID, разделенных запятой;
    • JuridicalRdnExcludeList - компоненты имени, недопустимые для сертификатов, тип которых определен как сертификат юридического лица. В параметре необходимо указывать список OID, разделенных запятой;
    • JuridicalForeignerRdnExcludeList - компоненты имени, недопустимые для сертификатов, тип которых определен как сертификат филиала (представительства) иностранного юридического лица. В параметре необходимо указывать список OID, разделенных запятой;
    • JuridicalRepresentativeRdnExcludeList - компоненты имени, недопустимые для сертификатов, тип которых определен как сертификат физического лица, действующего от имени юридического лица без доверенности. В параметре необходимо указывать список OID, разделенных запятой;
    • GovernmentRdnExcludeList - компоненты имени, недопустимые для сертификатов, тип которых определен как сертификат лица, замещающего государственные должности. В параметре необходимо указывать список OID, разделенных запятой.

    Пример регистрации плагина с дополнительными параметрами:

    Add-VsCertificateVerifierPlugin -DisplayName $vs_name -Assembly CryptoPro.Plugins.VerificationService.CertificateVerifier.Qualified.dll -PluginDescription "Проверка сертификатов на соответствие установленной форме" -Parameters @{'TSLPath'='/opt/tmp/tsl/tsl.xml';'JuridicalRepresentativeRdnExcludeList'='2.5.4.3,2.5.4.2';'GovernmentIssuerList'='УЦ ООО Лунный свет, КОРНЕВОЙ УЦ ИП Иванов'}
    

    Проверка УЦ на принадлежность к заданному списку

    Для проверки УЦ на принадлежность к заданному списку УЦ необходимо указать путь к файлу со списком УЦ Tsl.xml в параметре TSLPath при настройке плагина.

    Файл Tsl.xml публикуется по адресу https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/getxml.

    Загрузка файла Tsl.xml возможна следующими способами:

    • при помощи утилиты TSLTool
    # Для Windows (необходимо перейти в директорию установки)
    DSS.TslTool.exe --skipcrl --skipcerts --skiproot
    
    # Для *nix 
    tsltool --skipcrl --skipcerts --skiproot
    

    Файл TSL будет загружен в папку tmp в каталоге утилиты TSLTool.exe.

    • при помощи команды iwr в консоли PowerShell (только для Windows)
    iwr -uri https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/getxml -OutFile E:\tmp\tsl.xml
    

    SVS автоматически отслеживает изменения файла TSL, путь к которому указан в параметре TSLPath. Скопировать актуальный файл TSL можно с помощью скрипта, приведенного ниже (только для Windows). Данный скрипт возможно добавить в планировщик задач и выполнять раз в сутки (или чаще).

    Пример скрипта копирования TSL:

    $ErrorActionPreference = "Stop"
    
    # Полный путь к загруженному файлу TSL
    $sourceFile = "E:\tmp\tsl_source\tsl.xml"
    
    # Полный путь к файлу TSL, используемому SVS
    $destinationFile = "E:\tmp\tsl_target\tsl.xml"
    
    # Загрузка файла TSL
    wget https://e-trust.gosuslugi.ru/app/scc/portal/api/v1/portal/ca/getxml -OutFile $sourceFile
    
    if (!(Test-Path $sourceFile -PathType Leaf)) {
        # Загруженный файл TSL отсутствует
        Write-Host "Файл TSL отсутствует! " $sourceFile
        exit 2;
    }
    
    $targetFolder1 = Split-Path $destinationFile -Parent
    if (!(Test-Path $targetFolder1 -PathType Container)) {
        # Не существует каталог, в который требуется скопировать файл TSL
        Write-Host "Каталог не существует! " $targetFolder1
        exit 2;
    }
    
    if (!(Test-Path $destinationFile -PathType Leaf)) {
    
     Write-Host "Копирование нового файла TSL..."
    
     # Целевой файл TSL отсутствует
     # Просто копируем файл TSL
     Copy-Item $sourceFile -Destination $destinationFile
    
    } else {
     # Целевой файл TSL присутствует
     # Копируем файл TSL при помощи временного файла
    
     Write-Host "Замена существующего файла TSL... "
    
     $targetFolder = Split-Path $destinationFile -Parent
     $tmpTslPath = Join-Path -Path $targetFolder -ChildPath "temp_tsl.xml"
    
     if (Test-Path $tmpTslPath -PathType Leaf) {
        # Если временный файл существует, удалим его
        Remove-Item $tmpTslPath -Force
     }
    
     # Копируем TSL во временный файл
     Copy-Item $sourceFile -Destination $tmpTslPath
    
     # Перемещаем TSL в целевой файл
     Move-Item $tmpTslPath -Destination $destinationFile -Force
    }
    

    Настройка выполнения проверки полей сертификата по умолчанию

    Проверка соответствия полей сертификата установленной форме при помощи описанного в данном разделе плагина может применяться по умолчанию как в веб-интерфейсе SVS, так и при обращении к SVS с использованием REST API. Для этого в настройках плагина необходимо указать флаг CheckByDefaultRequired.

    Пример:

    Set-VsCertificateVerifierPlugin -ID 1 -CheckByDefaultRequired 1
    

    В зависимости от интерфейса SVS данная настройка будет применена следующим образом:

    • в веб-интерфейсе SVS - напротив пункта "Проверка сертификата на соответствие установленной форме" (или иной формулировке, если это было указано при настройке плагина) в разделе "Дополнительные проверки" по умолчанию будет активирован чекбокс. Пользователь может самостоятельно отключить проверку, деактивировав данный чекбокс перед отправкой сертификата на проверку.
    • при использовании REST API SVS - параметр зависит от переданного в запросе списка CertVerifiersPluginsIds:
      • если список передан - проверка не учитывается, будут применены плагины, указанные в списке;
      • если список передан со значением NULL - проверка не учитывается, никакие дополнительные проверки к сертификату применяться не будут;
      • если список НЕ передан (отсутствует в запросе) - проверка учитывается, сертификат будет проверен в соответствии с настройками плагина, описанного в данном разделе.

    Для прикладных систем, взаимодействующих с КриптоПро SVS через REST API, но не умеющих обрабатывать результаты дополнительных проверок сертификатов (параметр CertificateVerificationResult), можно включить неуспешный результат проверки в основное сообщение об ошибке (параметр Message). Данное поведение можно настроить при помощи следующей команды.

    Set-VsProperties -IncludeCertPluginErrorInfoInMainError 1
    Restart-VsInstance
    
    В начало © ООО "КРИПТО-ПРО", 2000–2025