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

    Набор командлетов для разворачивания DSS

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

    Скачать представленные команды одним файлом

    Внимание!

    Не исполняйте загруженный файл! Необходимые переменные и командлеты рекомендуется копировать из него в консоль PowerShell, запущенную на сервере, где производится разворачивание DSS, от имени администратора. При необходимости выбранные наборы команд можно преобразовывать в файлы *.ps1.

    Предварительные условия

    • Установленный SQL-Server;
    • Установленная роль Сервер приложений (IIS)
    • Настроенная привязка https на Сервере приложений (IIS)
    • Установленный КриптоПро DSS и дополнительное ПО (включая автоматическую установку с диска Microsoft .NET Framework версии 4.6.1 и PowerShell версии 3.0).
    • Установленный КриптоПро .NET.
    • Установленный ПАКМ «КриптоПро HSM».

    Подробнее о порядке разворачивания DSS

    Переменные

    # Отпечатки сервисных сертификатов, допустимы RSA и ГОСТ
    # Сервис Подписи
    $ssthumbprint = ""
    # Центр Идентификации
    $idpthumbprint = ""
    # Веб-интерфейс Пользователя
    $fethumbprint = ""
    # Сервис Аудита
    $asThumb = ""
    # Сервис Обработки Документов
    $dsthumbrint = ""
    
    
    # Имена экземпляров сервисов
    # Сервис Подписи
    $DisplayNamess = "helloss"
    # Центр Идентификации
    $DisplayNameidp = "hellosts"
    # Веб-интерфейс Пользователя
    $DisplayName = "hello"
    # Сервис Аудита
    $ASAppName = 'helloaudit'
    # Сервис Обработки Документов (Заполняется опционально, при использовании API V2)
    $DisplayNameDS = "hellods"
    # Сервис взаимодействия с DSS SDK (mDAG) (Заполняется опционально, при использовании API V2)
    $DisplayNameMD  ="hellomdag"
    
    
    
    # Имена пулов приложений
    $ApplicationNamess = $DisplayNamess
    $ApplicationName = $DisplayName
    $ApplicationNameidp = $DisplayNameidp
    $ApplicationNameMD = $DisplayNameMD
    $ApplicationNameDS = $DisplayNameDS
    
    
    
    # Имена БД (использованы рекомендуемые префиксы)
    $SSdb = "SignatureServerDB" + "$DisplayName"
    $STSdb = "IdentityServiceDB" + "$DisplayName"
    $DSdb = "DocumentStoreDB" + "$DisplayName"
    $OPdb = "OperationsDB" + "$DisplayName"
    $ASdb = "AnalyticsServiceDB" +"$ASAppName"
    

    Подключение к базе данных

    КриптоПро DSS позволяет использовать БД с различными типами аутентификации и расположенные как на одном сервере с экземплярами компонентов (т.н. "локальные"), так и на удаленном сервере. Для подключения экземпляров сервисов DSS к БД необходимо зарегистрировать соответствующие строки подключения при помощи командлетов администрирования.

    Подробнее о подключении к БД

    Примечание

    Используйте только необходимый блок переменных и соответствующий блок командлетов для настройки подключения к БД.

    # Выберите один из блоков ниже в зависимости от того, какой тип подключения требуется настроить
    #
    # БД на удаленном сервере с Windows-аутентификацией 
    $SQLServerName = "dssdb"
    $SQLServiceAccountName = "DSS\DssService"
    $SQLServiceAccountPassword = ""
    #
    # БД на удаленном сервере с SQL-аутентификацией 
    $SQLServerName = "dssdb"
    $SQLServiceAccountName = "DSS\DssService"
    $SQLServiceAccountPassword = ""
    $AsUser =""
    $AsUserPassword= ""
    #
    # Локальная БД
    $SQLServerName = ""
    #
    # DNS 
    $SiteName = "Default Web Site"
    $DNSName = ""
    
    # Cтроки для подключения к БД для всех сервисов. Необходимо выбрать только один блок команд.
    #
    # Подключение удаленной БД с Windows-аутентификацией 
    # connection_string to SignServer database
    $connInfoSS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$SSdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword 
    # connection_string to STS database
    $connInfoSTS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$STSdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword  
    # connection_string to AnalyticsService database
    $connInfoAS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$Asdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword 
    # connection_string to DocumentStore database
    $connInfoDS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$DSdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword 
    # connection_string to Operations database for SignServer
    $connInfoOS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$OPdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword 
    #
    # Подключение удаленной БД с SQL-аутентификацией 
    # connection_string to SignServer database
    $connInfoSS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$SSdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword  -AsUser  $AsUser -AsUserPassword  $AsUserPassword
    # connection_string to STS database
    $connInfoSTS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$STSdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword   -AsUser  $AsUser -AsUserPassword  $AsUserPassword
    # connection_string to AnalyticsService database
    $connInfoAS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$Asdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -AsUser  $AsUser -AsUserPassword  $AsUserPassword
    # connection_string to DocumentStore database
    $connInfoDS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$DSdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -AsUser  $AsUser -AsUserPassword  $AsUserPassword
    # connection_string to Operations database for SignServer
    $connInfoOS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$OPdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -AsUser  $AsUser -AsUserPassword  $AsUserPassword
    

    Экземпляры

    Центр Идентификации

    # Создание экземпляра Центра Идентификации
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/sts/scenario.html
    
    # Создание экземпляра (выберите один из двух вариантов)
    # Если используется БД на удаленном сервере
    New-DssStsInstance -DisplayName $DisplayNameidp -ApplicationName $ApplicationNameidp -SiteName "$SiteName" -ConnectionInfo $connInfoSTS
    # Если используется локальная БД
    New-DssStsInstance -DisplayName $DisplayNameidp -ApplicationName $ApplicationNameidp -SiteName "$SiteName" -DBName  $STSdb  -SQLServerName "$SQLServerName"
    
    # Добавление внешнего центра идентификации (в тестовом режиме)
    # Set-DssIdentityProvider -DisplayName $DisplayNameidp -IssuerName realsts -Thumbprint $idpthumbprint -Title "realsts"
    # Добавление отпечатка сервисного сертификата Центра Идентификации 
    Set-DssStsProperties -DisplayName $DisplayNameidp –ServiceCertificate $idpthumbprint
    
    # Регистрация Oauth-клиента
    Add-DssDefaultClient -DisplayName $DisplayNameidp –PassThru -Identifier client$DisplayName
    
    # Настройка обработчика УЦ для аутентификации пользователей
    # Подробнее: https://dss.cryptopro.ru/docs/CAIntegration/setenrolls/umsenroll.html
    $CAServiceUrlAutchCA =""
    $EnrollNameAutchCA =""
    $OperatorCertThumbprintAutchCA =""
    $FolderIDAutchCA = ""
    $TemplateOIDAutchCA = ""
    Add-DssStsCryptoProCA20Enrollment -DisplayName $DisplayName -CAServiceUrl "$CAServiceUrlAutchCA" -EnrollName "$EnrollNameAutchCA" -OperatorCertThumbprint "$OperatorCertThumbprintAutchCA" -FolderID "$FolderIDAutchCA" -TemplateOID "$TemplateOIDAutchCA"
    
    # Добавление Оператора DSS
    Add-DssIdentityOperator -DisplayName $DisplayNameidp -Login test_oper  -Name test_oper –IssuerName realsts -Type Operator -Certificate <путь к файлу сертификата>
    # На этом порту IIS должен быть ГОСТ сертфикат
    Set-DssStsProperties -DisplayName $DisplayNameidp -SslAuthPort <порт> -SslAuthHostName "$DNSName"
    # Необходимо добавить корневой  и промежуточный сертификаты в хранилище сертфикатов Client Authentication Issuers
    
    # Настройка ИНН юридического лица (INNLE)
    # Подробнее: https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/368/1/registrcija-126431004-innle-v-kriptopro-dss
    Add-DssRdn -DisplayName $DisplayNameidp  -Oid 1.2.643.100.4 -StringIdentifier INNLE -FriendlyName "ИНН юридического лица"
    Add-DssRdnPolicy -DisplayName $DisplayNameidp  -Identifier (Get-DssRdn -DisplayName $DisplayNameidp |where {$_.StringIdentifier -eq "INNLE"}).id
    # Регистрация компонента имени для политики имен группы пользователей ЦИ        
    Get-DssIdentityGroup -DisplayName $DisplayNameidp | foreach { Add-DssRdnPolicy -DisplayName $DisplayNameidp -Identifier (Get-DssRdn -DisplayName $DisplayNameidp|where {$_.StringIdentifier -eq "INNLE"}).id -GroupId  $_.ID}
    
    # При необходимости, если длина RDN слишком большая 
    # get-DssRdn -DisplayName $DisplayNameidp
    # Находим нужный RDN и выполняем  set-DssRdn -DisplayName $DisplayNameidp -MaxLength 64 -Id <Значение из GET>
    # Если Оператор DSS для аутентификации использует сертификат ГОСТ Р 34.10-2012, в то время как веб-сервер использует на 443 порту сертификат RSA, 
    # необходимо создать привязку сертификата веб-сервера ГОСТ на выделенном порту. 
    
    # Не забудьте добавить лицензию на компоненты ЦИ!
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/setting/license/sts.html
    

    Сервис Подписи

    # Создание экземпляра Сервиса Подписи 
    # Подробнее: http://dss.cryptopro.ru/docs/adminguide/SignServer/scenario.html
    
    # Создание экземпляра (выберите один из двух вариантов)
    # Если используется БД на удаленном сервере
    New-DssSignServerInstance -DisplayName $DisplayNamess -ApplicationName $ApplicationNamess -SiteName "$SiteName" -ConnectionInfo $connInfoSS
    # Если используется локальная БД
    New-DssSignServerInstance -DisplayName $DisplayNamess -ApplicationName $ApplicationNamess -SiteName "$SiteName" -DBName $SSdb  -SQLServerName "$SQLServerName"
    
    # Ввод отпечатка сервисного сертификата
    Set-DSSProperties -DisplayName $DisplayNamess -ServiceCertificateThumbprint $ssthumbprint
    # Настройка отношений доверия с Центром Идентификации
    Add-DSSClaimsProviderTrust -DisplayName $DisplayNamess -IssuerName realsts -Thumbprint $idpthumbprint
    
    # Настройка криптопровайдеров GostWithMasterKey - можно указать собственные значения, например, для HSM это $ProviderType  = "80" и $ProviderName = "Crypto-Pro GOST R 34.10-2012 HSM Svc CSP"
    $ProviderType  = "80"
    $ProviderName = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider"
    
    # Добавление криптопровайдера Сервиса Подписи
    $idprovSS = (Add-DSSCryptoProvider -DisplayName $DisplayNamess  -TypeId GostWithMasterKey -ProviderType $ProviderType -ProviderName "$ProviderName" ).Id
    
    # Если необходимо скопировать провайдер в конфигурации с двумя одновременно подключенными HSM:
    # Copy-DssCryptoProvider -DisplayName $DisplayNamess -NewProvName "<имя для нового провайдера>" -ID $idprovSS.Guid
    # Добавление криптопровайдера для DSS Lite
    # Add-DSSCryptoProvider -DisplayName $DisplayNamess  -TypeId Lite -ProviderType $ProviderType -ProviderName "$ProviderName"
    # Переключение Сервиса Подписи в режим работы Client (для использования DSS Lite)
    # Set-DssProperties -DisplayName $DisplayNamess  -ServiceType Client
    
    # Ввод лицензии на Сервис Подписи (см. бланк лицензии)
    # Подробнее о лицензировании Сервиса Подписи: https://dss.cryptopro.ru/docs/adminguide/setting/license/signserver.html
    # Серийный номер
    $SerialNumberSignServerLicense =""
    # Имя компании
    $CompanyNameSignServerLicense = ""
    Add-DssLicense -DisplayName $DisplayNamess -SerialNumber $SerialNumberSignServerLicense -CompanyName  $CompanyNameSignServerLicense
    # Ввод демонстрационной лицензии на Сервис Подписи
    # Add-DssLicense
    
    # Настройка обработчиков запросов на сертификат (только для работы в тестовом режиме) 
    # Подробнее: http://dss.cryptopro.ru/docs/CAIntegration/intro.html
    #
    # Пример настройки обработчика КриптоПро УЦ 2.0
    $UCName= 'Тестовый подчиненый УЦ ООО "Крипто-Про"'
    $CAServiceUrl= "https://FlashUC/RA/RegAuthLegacyService.svc"
    $OperatorCertThumbprint = "1e7665bdf32d0eab35e4edce2e723e061d00c3f1"
    $FolderID ="91e5449c-84cd-4b6d-900c-ad3d0060b3ca"
    $AuthorityName ='FlashUC'
    Add-DssEnrollment -DisplayName $DisplayNamess -Type CryptoProCA20 -EnrollDisplayName "$UCName"  -CAServiceUrl "$CAServiceUrl"  -OperatorCertThumbprint "$OperatorCertThumbprint"  -FolderID  "$FolderID" -AuthorityName "$AuthorityName"
    #
    # Пример настройки обработчика стороннего УЦ
    $CAName ="OutOfBand"
    $locrdn="E:\UC OutOfBand\" #Путь к папке с настройками различительного имени пользователя и шаблонов сертификатов
    Add-DssEnrollment -Displayname $DisplayNamess –Type EnrollOutOfBand –EnrollDisplayName $CAName –RdnConfig  "$locrdn\rdn.config" -TemplatesConfig "$locrdn\templates.config"
    
    # Добавление TSP-службы
    Add-DssTspService  -DisplayName $DisplayNamess  -Name "testtsp" -Title "Тестовая TSP служба " -Url  "http://flashuc/tsp/tsp.srf"
    

    Веб-интерфейс Пользователя

    # Создание экземпляра Веб-интерфейса Пользователя
    # Подробнее: http://dss.cryptopro.ru/docs/adminguide/Frontend/scenario.html
    
    # Создание экземпляра 
    New-DssFEInstance -DisplayName $DisplayName -ApplicationName $ApplicationName -SiteName "Default Web Site"
    # Добавление отпечатка сертификата Веб-интерфейса Пользователя + Настройка адресов Сервиса Подписи и Центра Идентификации
    Set-DssFEProperties -DisplayName $DisplayName -ServiceCertificate $fethumbprint -SignServerAddress "https://$DNSName/$DisplayNamess" -StsAddress "https://$DNSName/$ApplicationNameidp" -AnalyticsServiceAddress "https://$DNSName/$ASAppName"
    # Регистрация на Веб-интерфейсе Пользователя Центра Идентификации в качестве доверенного издателя маркеров безопасности:
    Add-DssFEClaimsProviderTrust -DisplayName $DisplayName -IssuerName realsts -Thumbprint $idpthumbprint
    #Настройка на Центре Идентификации доступа по OpenID Connect
    Add-DssClient -DisplayName $DisplayNameidp  -Identifier  сryptopro.dss.frontend.$DisplayName  -Name  сryptopro.dss.frontend.$DisplayName -SecretLifetime 0 -GenerateSecret
    $Secret =(get-DssClientSecret -DisplayName $DisplayNameidp  -ClientId  сryptopro.dss.frontend.$DisplayName).Value
    set-DssClient -DisplayName $DisplayNameidp  -AllowedFlow  ClientCredentials, AuthorizationCode, TokenExchange  -RedirectUri "https://$DNSName/$DisplayName/Admins/Users/ExternalCallback", "https://$DNSName/$DisplayName/Users/ExternalCallback" -ClientId сryptopro.dss.frontend.$DisplayName
    # Настройка на Веб-интерфейсе доступа по OpenID Connect 
    Set-DssFeOidcSettings -DisplayName $DisplayName -Issuer "https://$DNSName/$ApplicationNameidp" -Realm "https://$DNSName/$DisplayName" -ClientId сryptopro.dss.frontend.$DisplayName  -ClientSecret $Secret
    

    Сервис Аудита

    # Создание экземпляра Сервиса Аудита
    # Подробнее: http://dss.cryptopro.ru/docs/adminguide/Frontend/scenario.html
    
    # Создание экземпляра (выберите один из двух вариантов)
    # Если используется БД на удаленном сервере
    New-DSSAnalyticsServiceInstance -SiteName "$SiteName" -ApplicationName $ASAppName -DisplayName $ASAppName -ConnectionInfo $connInfoAS
    # Если используется локальная БД
    New-DSSAnalyticsServiceInstance -SiteName "$SiteName" -ApplicationName $ASAppName -DisplayName $ASAppName -DBName $Asdb  -SQLServerName "$SQLServerName"
    
    # Добавление отпечатка сервисного сертификата Сервиса Аудита + Настройка конечной точки Сервиса Аудита для отображения записей аудита на веб-интерфейсе
    Set-DssAnalyticsServiceProperties -DisplayName $ASAppName -ServiceCertificate $asThumb  -AnalyticsServiceUri "https://$DNSName/$ASAppName/AnalyticsService.svc/issuedtoken/transport/nosc"
    # Регистрация на Сервисе Аудита Центра Идентификации в качестве доверенного издателя маркеров безопасности
    Add-DssAnalyticsClaimsProviderTrust -DisplayName $ASAppName -IssuerName realsts -Thumbprint $idpthumbprint
    # Настройка URL-адресов для доступа Пользователей и Операторов СЭП
    Set-DssAnalyticsWSFederationSettings -DisplayName $ASAppName -Issuer "https://$DNSName/$DisplayNameidp/sts/issue/" -Realm "https://$DNSName/$ASAppName/Audit" -homerealm "" -requirehttps 0
    # Настройка аудита Сервиса Подписи
    New-DssSignServerAudit -DisplayName $DisplayNamess -UseRestApi 1 -AuditServiceAddress  http://$DNSName/$ASAppName/api/writer
    # Настройка аудита Центра Идентификации
    New-DssStsAudit -DisplayName $DisplayNameidp -UseRestApi 1 -AuditServiceAddress  http://$DNSName/$ASAppName/api/writer
    # Настройка адреса ЦИ, куда Сервис Аудита обращается для аутентификации
    Set-DssAnalyticsServiceProperties -DisplayName "$ASAppName"  -StsAddress "https://$DNSName/$ApplicationNameidp/Active.svc/service"
    
    # НАСТРОЙКА ОТОБРАЖЕНИЯ ПУНКТА МЕНЮ "АУДИТ" 
    # На Центре Идентификации
    Set-DssStsProperties -DisplayName $DisplayNameidp -AnalyticsServiceAddress "https://$DNSName/$ASAppName/analyticsservice.svc/issuedtoken/transport/nosc"
    # На Веб-интерфейсе Пользователя
    Set-DssFEProperties –DisplayName $DisplayName –AnalyticsServiceAddress https://$DNSName/$ASAppName
    
    # Добавляем ссылку для RelyingParty
    $ASMetadataUrl = "http://$DNSName/$ASAppName/FederationMetadata/2007-06/FederationMetadata.xml" 
    
    #Отчеты аудита
    #Подробнее: https://dss.cryptopro.ru/docs/adminguide/Analytics/plugins.html
    $AuditConnectionString = Get-DssAnalyticsRegistryProperties -DisplayName $ASAppName
    $SignServer = "1/$DisplayNamess"
    $StsConnectionString = Get-DssStsRegistryProperties -DisplayName $DisplayNameidp
    $STS = "1/$DisplayNameidp"
    
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension ccr -Assembly CryptoPro.DSS.AnalyticsService.ReportPlugins.dll -Classname CryptoPro.DSS.AnalyticsService.ReportPlugins.CertificateReports.CreatedCertificateReport -Parameters @{"AuditConnectionString" = "$AuditConnectionString"; "InstanceName"="$SignServer"; "ReportName"="Количество созданных сертификатов"}
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension csr -Assembly CryptoPro.DSS.AnalyticsService.ReportPlugins.dll -Classname CryptoPro.DSS.AnalyticsService.ReportPlugins.SignatureReports.CreatedSignaturesReport -Parameters @{"AuditConnectionString" = "$AuditConnectionString"; "StsConnectionString" = "$StsConnectionString"; "InstanceName"="$SignServer"; "ReportName"="Количество созданных подписей"}
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension cur -Assembly CryptoPro.DSS.AnalyticsService.ReportPlugins.dll  -Classname CryptoPro.DSS.AnalyticsService.ReportPlugins.UserReports.CreatedUsersReport -Parameters @{"StsConnectionString" = "$StsConnectionString"; "ReportName"="Количество созданных пользователей"; "RealmName"="realsts";"RdnList"="CN"}
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension mur -Assembly CryptoPro.DSS.AnalyticsService.ReportPlugins.dll -Classname CryptoPro.DSS.AnalyticsService.ReportPlugins.MyDss.MyDssUserReport -Parameters @{"AuditConnectionString" = "$AuditConnectionString"; "InstanceName"="$STS"; "ReportName"="Отчет о пользователях MyDss"}
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension clur -Assembly CryptoPro.DSS.AnalyticsService.ReportPlugins.dll -Classname CryptoPro.DSS.AnalyticsService.ReportPlugins.CloudCspReport.CloudCspReport -Parameters @{"AuditConnectionString" = "$AuditConnectionString"; "InstanceName"="$STS"; "ReportName"="Отчет о пользователях Cloud CSP"}
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension ure -Assembly "CryptoPro.DSS.AnalyticsService.ReportPlugins.dll" -Classname "CryptoPro.DSS.AnalyticsService.ReportPlugins.UserReports.UserReportExtended" -Parameters @{"AuditConnectionString" = "$AuditConnectionString"; "InstanceName"="1/$DisplayNameidp"; "ReportName"="Расширенный отчёт о пользователях";}
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension cre -Assembly "CryptoPro.DSS.AnalyticsService.ReportPlugins.dll" -Classname "CryptoPro.DSS.AnalyticsService.ReportPlugins.CertificateReports.CertificateReportExtended" -Parameters @{"AuditConnectionString" = "$AuditConnectionString"; "InstanceName"="1/$DisplayNamess"; "ReportName"="Расширенный отчёт о сертификатах";}
    Add-DssAnalyticsReportPlugin -DisplayName $ASAppName -FileExtension gdr -Assembly CryptoPro.DSS.Analytics.ReportPlugins.dll -Classname CryptoPro.DSS.Analytics.ReportPlugins.Reports.GenericReport -Parameters @{"AuditConnectionString"="$AuditConnectionString";"InstanceName"="$STS";"SsInstanceName"="$SignServer"}
    

    Доверие компонентов

    Настройки отношений доверия

    # Настройка отношений доверия
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/sts/relyingparty.html
    Add-DssRelyingPartyTrust -DisplayName $DisplayNameidp -Name "Frontend" -Description "Frontend"  -MetadataUri "https://$DNSName/$ApplicationName/FederationMetadata/2007-06/FederationMetadata.xml" 
    Add-DssRelyingPartyTrust -DisplayName $DisplayNameidp -Name "SignServer" -MetadataUri "http://$DNSName/$ApplicationNamess/FederationMetadata/2007-06/FederationMetadata.xml"
    Add-DssRelyingPartyTrust -DisplayName $DisplayNameidp -Name "AnalyticsService" -MetadataUri $ASMetadataUrl
    
    # Внимание! Необходимо выдать права на доступ к закрытому ключу пулам приложений экземпляров сервисов
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/servicecertificates/privatekeyaccess.html
    
    # Перезапуск пулов приложений
    Restart-WebAppPool Cryptoprodss-1-$ASAppName
    Restart-WebAppPool Cryptoprodss-1-$DisplayNameidp
    Restart-WebAppPool Cryptoprodss-1-$DisplayName
    Restart-WebAppPool Cryptoprodss-1-$DisplayNamess
    

    Устранение неполадок

    # Из-за особенностей работы IIS может возникать следующая ошибка:
    # В параметры -BackChannelUrl и -Identities в настройках Сервиса Подписи в качестве доверенной стороны попадают неверные значения
    
    # Задание идентификатора Сервиса Подписи как доверенной стороны (получить идентификатор нужной доверенной стороны можно при помощи командлета Get-DssRelyingPartyTrust)
    Get-DssRelyingPartyTrust -DisplayName $displaynameidp
    $id ="3"
    # Исправление параметров
    Set-DssRelyingPartyTrust -DisplayName $DisplayNameidp -Id $id -BackChannelUrl "https://$DNSName/$DisplayNamess/SignService.svc/transactiontokens" 
    Set-DssRelyingPartyTrust -DisplayName $DisplayNameidp -Id $id -Identities "https://$DNSName/$DisplayNamess/SignService.svc/transactiontokens","https://$DNSName/$DisplayNamess/rest","https://$DNSName/$DisplayNamess/rest/api","urn:cryptopro:dss:signserver:$DisplayNamess" 
    # Проверяем
    Get-DssRelyingPartyTrust -DisplayName $displaynameidp
    # Перезапуск экземпляров компонентов
    Restart-DssStsInstance -DisplayName $displaynameidp
    

    Оповещение

    В данном примере приведена минимально необходимая настройка оповещения пользователей посредством SMS- и Email-сообщений. При этом настройки политик оповещения и шаблонов сообщений остаются по умолчанию.

    Подробнее о системе оповещения DSS

    Общие настройки

    # Настройка системы оповещения 
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/notification/intro.html
    #
    # Центр Идентификации
    # Регистрация транспортного плагина 
    $Notify = (Add-DssStsPlugin -DisplayName $DisplayNameidp  -PluginTypeName "DSS.Notification.Transport.NotificationTransportPlugin,DSS.Notification.Transport" -PluginType NotificationService  -Settings @{ServiceAddress="https://$DNSName/$DisplayNameidp/"}).ID
    # Регистрация модуля рассылки уведомлений
    Add-DssStsNotifier -TransportPluginID $Notify -DisplayName $DisplayNameidp -NotifierType NotificationService
    #
    # Сервис Подписи
    # Регистрация транспортного плагина  
    $NotifySS = (Add-DssSignServerPlugin  -Displayname $DisplayNamess  -PluginTypeName "DSS.Notification.Transport.NotificationTransportPlugin,DSS.Notification.Transport" -PluginType NotificationService  -Settings   @{ServiceAddress="https://$DNSName/$DisplayNameidp/"}).ID
    # Регистрация модуля рассылки уведомлений
    Add-DssSignServerNotifier -TransportPluginID $NotifySS -NotifierType NotificationService -Displayname $DisplayNamess
    

    Оповещение по Email

    # Настройка оповещения по электронной почте
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/notification/Email.html
    $Hostemail ="192.168.68.222"
    $Port ="25"
    $FromAddress ="noreply@cryptopro.ru"
    
    $TransportPIDFSMS= (Add-DssStsPlugin -DisplayName $DisplayNameidp -PluginTypeName “CryptoPro.DSS.EmailService.SmtpPlugin.SmtpPlugin,DSS.EmailService.SmtpPlugin” -PluginType Email –Settings @{“Host”=”$Hostemail”; “Port”=”$Port”; “FromAddress”=”$FromAddress”; “RequireSsl”=”true” }).ID
    $FormaterPIDFSMS= (Add-DssStsPlugin -DisplayName $DisplayNameidp -PluginTypeName “CryptoPro.DSS.MessageFormatter.EmailFormatter,DSS.MessageFormatter” -PluginType Formatter –Settings @{}).ID
    Add-DssInternalNotifier -DisplayName $DisplayNameidp -TransportPluginID $TransportPIDFSMS -FormatterPluginID $FormaterPIDFSMS -NotifierType Email
    

    Оповещение по SMS

    # Настройка имитации рассылки SMS-сообщений без использования SMS-шлюза (FakeSMS)
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/notification/Sms.html
    New-Item -Path "C:\inetpub\wwwroot\fakesms_$Displayname" -ItemType Directory
    Set-DssConfirmationPolicy -DisplayName $Displaynameidp -AllOpcActions -AllowOverride $true
    Set-DssStsProperties -DisplayName $Displaynameidp -AllowUserRegistration $true -PhoneConfirmation $true
    Enable-DssAuthenticationMethod -DisplayName $Displaynameidp -Uri http://dss.cryptopro.ru/identity/authenticationmethod/otpviasms
    $SMSBaseDir = "C:\inetpub\wwwroot\fakesms_$Displayname"
    $TransportPIDFSMS= (Add-DSSSTSPlugin -DisplayName $Displaynameidp -PluginTypeName "CryptoPro.DSS.SmsService.StubPlugin.SmsStub,DSS.SmsService.StubPlugin" -PluginType SMS -Settings @{"WorkingDirectory" = $SMSBaseDir}).ID
    $FormaterPIDFSMS= (Add-DSSSTSPlugin -DisplayName $Displaynameidp -PluginTypeName "CryptoPro.DSS.MessageFormatter.SMSFormatter,DSS.MessageFormatter" -PluginType Formatter -Settings @{Header="Крипто-Про DSS."}).ID
    Add-DssInternalNotifier -DisplayName $DisplayNameidp -TransportPluginID $TransportPIDFSMS -FormatterPluginID $FormaterPIDFSMS -NotifierType SMS
    
    # Включение просмотра каталога с "SMS-сообщениями":
    Set-WebConfigurationProperty -filter /system.webServer/directoryBrowse -name enabled -Value true -PSPath "IIS:\Sites\Default Web Site\fakesms_$Displayname"
    
    # Предоставление прав учетным записям пулов приложений Центра Идентификации и Сервиса Подписи на каталог с "SMS-сообщениями", а также дочерние каталоги и файлы:
    icacls "C:\inetpub\wwwroot\fakesms_$Displayname" /grant "IIS AppPool\CryptoProDSS-1-$DisplayNameidp"":(CI)(OI)F"
    icacls "C:\inetpub\wwwroot\fakesms_$Displayname" /grant "IIS AppPool\CryptoProDSS-1-$DisplayNamess"":(CI)(OI)F"
    

    myDSS (APIv1)

    # Развертывание myDSS (API v1)
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/mydss/intro.html
    
    # Объявление переменных
    $MydssInternalbd = "MydssInternalbd$DisplayName"
    $MydssExternalbd = "MydssExternalbd$DisplayName"
    $InternalInstance= "MyDssServerInternal$DisplayName"
    $ExternalInstance = "MyDssServerExternal$DisplayName"
    #
    # Пароль клиентского сертификата APN (Apple)
    $ApnClientCertPassword =""
    # Путь к клиентскому сертификату APN (Apple)
    $ApnClientCertPath = "<путь>" 
    # Ключ для PUSH-уведомлений Google
    $GoogleServerKey = ""
    #
    # Задание имен DNS для серверов, на которых расположены компоненты MyDssServerInternalInstance и MyDssServerExternalInstance
    # Внимание! Экземпляры компонентов могут находиться на разных серверах
    $DNSInternal="localhost"
    $DNSExternal="fastdss"
    
    # Подключение к БД на удаленном сервере с Windows-аутентификацией 
    $connInfoMYDSSInternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssInternalbd  -AccountType Windows -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword      
    $connInfoMYDSSExternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssExternalbd  -AccountType Windows -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword
    
    # Подключение к БД на удаленном сервере с SQL-аутентификацией 
    $connInfoMYDSSInternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssInternalbd -AsUser  $AsUser -AsUserPassword  $AsUserPassword -AccountType SQL        -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword      
    $connInfoMYDSSExternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssExternalbd -AsUser  $AsUser -AsUserPassword  $AsUserPassword -AccountType SQL        -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword
    
    # Создание экземпляров  MyDssServerInternal + MyDssServerExternal
    #
    # Для БД, расположенной на удаленном сервере
    # Создание экземпляра Сервиса взаимодействия с ЦИ
    New-MyDssServerInternalInstance -SiteName "$SiteName"   -DisplayName $InternalInstance  -ApplicationName "$InternalInstance" -ConnectionInfo $connInfoMYDSSInternal
    # Создание экземпляра Сервиса взаимодействия с мобильным приложением myDSS
    New-MyDssServerExternalInstance -SiteName "$SiteName"   -DisplayName $ExternalInstance  -ApplicationName "$ExternalInstance" -ConnectionInfo $connInfoMYDSSExternal
    #
    # Для локальной БД
    # Создание экземпляра Сервиса взаимодействия с ЦИ
    New-MyDssServerInternalInstance -SiteName "$SiteName"   -DisplayName $InternalInstance  -ApplicationName "$InternalInstance" -DBName $MydssInternalbd  -SQLServerName "$SQLServerName"
    # Создание экземпляра Сервиса взаимодействия с мобильным приложением myDSS
    New-MyDssServerExternalInstance -SiteName "$SiteName"   -DisplayName $ExternalInstance  -ApplicationName "$ExternalInstance"   -DBName $MydssExternalbd  -SQLServerName "$SQLServerName"
    
    # Настройка криптопровайдера (GostWithMasterKey)
    $ProviderType  = "80"
    $ProviderName = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider"
    # Добавление криптопровайдера
    Add-MyDssServerInternalCryptoProviders  -DisplayName $InternalInstance  -TypeId GostWithMasterKey -ProviderType $ProviderType -ProviderName $ProviderName
    
    # Задание адреса сервиса рассылки PUSH-уведомлений
    Set-MyDssServerInternalProperties -DisplayName $InternalInstance -InteractionPushServiceAddress "http://$DNSExternal/$ExternalInstance/InteractionPushService.svc"
    # Задание адреса Сервиса взаимодействия с мобильным приложением myDSS
    Set-MyDssServerInternalProperties -DisplayName $InternalInstance -InteractionServiceAddress "http://$DNSExternal/$ExternalInstance/InteractionService.svc"
    
    # Настройка Сервиса взаимодействия с мобильным приложением myDSS (этот блок команд может быть использован для подключения Центра Идентификации к ранее созданным компонентам myDSS)
    Set-MyDssInteractionServiceProperties -DisplayName  $ExternalInstance -ServiceAddress "http://$DNSInternal/$InternalInstance/Service.svc"
    # Настройка взаимодействия с серверами рассылки PUSH-уведомлений (Apple Push Notification Service и Firebase Cloud Messaging Server).
    Set-MyDssPushServiceProperties  -DisplayName  $ExternalInstance -ApnClientCertPassword $ApnClientCertPassword -ApnClientCertPath $ApnClientCertPath -GoogleServerKey $GoogleServerKey
    # Задание на ЦИ КриптоПро DSS адреса Сервиса взаимодействия с ЦИ и адреса ЦИ, куда возвращается результат подтверждения операций из мобильного приложения 
    Set-DssMobileAuthProperties -DisplayName "$DisplayNameidp" -ServiceAddress "http://$DNSInternal/$InternalInstance/service.svc" -CallbackUriPrefix "https://$DNSName$sslport/$DisplayNameidp"
    # Включение метода аутентификации myDSS
    Enable-DssAuthenticationMethod -DisplayName "$DisplayNameidp" –Uri http://dss.cryptopro.ru/identity/authenticationmethod/mobile 
    
    # В случае использования удаленной БД с Windows аутентификацией необходимо настроить запуск службы  mydsssrv0 (КриптоПро myDSS (MyDssServerExternal)) от имени учетной записи, имеющей доступ к БД.
    

    DSS SDK (APIv2)

    Сервис Обработки Документов и плагины

    # Создание и настройка экземпляра Сервиса Обработки Документов
    #Подробнее: http://dss.cryptopro.ru/docs/adminguide/DocumentStore/scenario.html
    #
    # Создание экземпляра (выберите один из двух вариантов)
    # Если используется БД на удаленном сервере
    New-DssDocumentStoreInstance -DisplayName $DisplayNameDS -SiteName $SiteName -ApplicationName $DisplayNameDS -ConnectionInfo $connInfoDS 
    # Если используется локальная БД
    New-DssDocumentStoreInstance -DisplayName $DisplayNameDS -SiteName $SiteName -ApplicationName $DisplayNameDS  -DBName $DSdb   -SQLServerName "$SQLServerName"
    
    # Настройка сервисного сертификата и срока хранения долговременных документов
    Set-DssDocumentStoreProperties -DisplayName $DisplayNameDS -ServiceCertificate $dsthumbrint
    Set-DssDocumentStoreProperties -DocumentStorageTime 3
    # Настройка адреса Сервиса Обработки Документов на Центре Идентификации:
    Set-DssStsProperties -DisplayName $ApplicationNameidp -DocumentStoreAddress https://$DNSName/$ApplicationNameDS
    # Настройка адреса Сервиса Обработки Документов на Веб-интерфейсе Пользователя 
    Set-DssFeProperties -DisplayName $ApplicationName -DocumentStoreAddress https://$DNSName/$ApplicationNameDS
    # Настройка адреса Сервиса Обработки Документов на Сервисе Подписи:
    Set-DssProperties -DisplayName $ApplicationNamess -DocumentStoreAddress https://$DNSName/$ApplicationNameDS
    # Регистрация на СОД Центра Идентификации в качестве доверенного издателя маркеров безопасности:
    Add-DssDocumentStoreClaimsProviderTrust -DisplayName $ApplicationNameDS -IssuerName realsts -Thumbprint $idpthumbprint
    # Регистрация на СОД Сервиса Подписи в качестве доверенного издателя маркеров безопасности:
    Add-DssDocumentStoreClaimsProviderTrust -DisplayName $ApplicationNameDS -IssuerName signserver -Thumbprint $ssthumbprint
    # Настройка аудита Cервиса Обработки Документов
    New-DssDocumentStoreAudit -DisplayName $ApplicationNameDS -AuditServiceAddress "https://$DNSName/$ASAppName/api/writer" -UseRestApi 1
    # Добавление профиля подписи. Все документы будут подписаны подписью формата CAdES-BES.
    Add-DssProcessingRule -DisplayName $ApplicationNamess -Format CAdES -DocumentsFormats * -Parameters @{ "CADESType"="BES"; "IsDetached"="true" } 
    $idProcessingTemplate = (get-DssProcessingRule -DisplayName $ApplicationNamess).id
    New-DssProcessingTemplate -DisplayName $ApplicationNamess -ProcessingRulesIds $idProcessingTemplate -Description "Подпись CAdES BES" 
    # Включение режима асинхронной подписи(по умолчанию он отключен)
    Enable-DssAsyncOperationSettings -DisplayName $ApplicationNamess
    # Регистрация Сервиса Обработки Документов в качестве доверенной стороны на Центре Идентификации.
    Add-DssRelyingPartyTrust -DisplayName $DisplayNameidp -Name DocumentStore -Identities urn:cryptopro:dss:documentstore:$DisplayNameDS 
    
    # Плагины отображения документов при помощи компонента Сервис Обработки Документов
    # Зарегистрированы по умолчанию, подробнее: 
    # https://dss.cryptopro.ru/docs/adminguide/DocumentStore/documents.html
    
    # Настройка плагина конвертации для отображаемых данных
    Set-DssDocumentStoreConverterPlugin -DisplayName $DisplayNameDS -FileExtension preview_@default_html -Parameters @{ "snippetTemplate"='<html lang="ru"><head><meta charset="UTF-8"/><style>body{{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; padding: 16pt;}} @media(prefers-color-scheme: dark){{body{{color: white;}}}}</style></head><body><p>Имя документа:</p><p>{0:Name}</p></body></html>' }
    # Настройка описания операции, отображаемого в МП для операции подписи и/или пакетной подписи
    $template2 = Get-DssFormatterTemplate -DisplayName $DisplayNameidp -EventTypes SecondaryAuthSign -Destination MyDssAuth
    Set-DssFormatterTemplate -DisplayName $DisplayNameidp -TemplateID $template2.ID -Template '{{"values": {{"dss": "КриптоПро DSS","date": "{0:Date}","login": "{0:Login}","certid": "{0:CertificateID}" }},"keys":{{"dss": "Сервер ЭП","date": "Время","login": "Логин пользователя", "certid":"Идентификатор сертификата"}}}}'
    $template2 = Get-DssFormatterTemplate -DisplayName $DisplayNameidp -EventTypes SecondaryAuthSignDocs -Destination MyDssAuth
    Set-DssFormatterTemplate -DisplayName $DisplayNameidp -TemplateID $template2.ID -Template '{{"values": {{"dss": "КриптоПро DSS","date": "{0:Date}","login": "{0:Login}","certid": "{0:CertificateID}" }},"keys":{{"dss": "Сервер ЭП","date": "Время","login": "Логин пользователя", "certid":"Идентификатор сертификата"}}}}'   
    # Настройка шаблона отображаемых данных для подтверждения входа
    $template = Get-DssMyDssFormatterTemplate -DisplayName $DisplayNameidp -EventTypes SecondaryAuthLogin
    Set-DssMyDssFormatterTemplate -DisplayName $DisplayNameidp -TemplateID $template.ID -TemplateCaption '{{"values": {{"dss": "КриптоПро DSS","date": "{0:Date}","login": "{0:Login}"}},"keys": {{"dss": "Сервер ЭП","date": "Время","login": "Логин пользователя"}}}}' -TemplateSnippet '<html lang="ru"><head><meta charset="UTF-8"/><style>body{{font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; padding: 16pt;}} @media(prefers-color-scheme: dark){{body{{color: white;}}}}</style></head><body><p>Подтвердите вход пользователя.</p><p>Идентификатор сессии: <b>{0:SessionId}</b></p></body></html>'
    

    Сервис Операций

    # Создание и настройка экземпляра Сервиса Операций
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/OperationService/scenario.html?q=Connect-DssstsOperationStore
    #
    # Подключение БД Сервиса Операций. Необходимо выбрать только один блок команд.
    #
    # Подключение Сервиса Операций для удаленной БД
    Connect-DssOperationStore -ConnectionInfo $connInfoOS -DisplayName $ApplicationNamess
    Connect-DssStsOperationStore -ConnectionInfo $connInfoOS -DisplayName $ApplicationNameidp
    #
    # Подключение Сервиса Операций для локальной БД
    Connect-DssstsOperationStore -SQLServerName "$SQLServerName" -DBName $OPdb  -DisplayName $ApplicationNameidp 
    Connect-DssOperationStore -SQLServerName "$SQLServerName" -DBName $OPdb  -DisplayName $ApplicationNamess
    
    # Настройка мониторинга очистки неактуальных операций (1 раз в сутки, в 1.00 AM)
    $time = New-TimeSpan -Hours 01 -Minutes 0 -Seconds 0
    # Настройка срока давности удаляемых операций (удаляются просроченные, выполненные и отклоненные операции, созданные более двух суток назад).
    Set-DssStsOperationEraser -DisplayName $DisplayNameidp -Times $time –OperationLimitInMinutes 2880
    # Включение мониторинга очистки
    Enable-DssStsOperationEraser -DisplayName $DisplayNameidp
    

    Сервис взаимодействия с DSS SDK (mDAG)

    # Создание и настройка экземпляра Сервиса взаимодействия с DSS SDK (myDssApiGateway, mDAG)»
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/mDAG/scenario.html
    # Внимание! Данный компонент необходимо располагать на выделенном сервере
    $DNSNameMdag =$DNSName
    
    # Создание нового экземпляра mDAG:
    New-MdagInstance -SiteName "Default Web Site"  -ApplicationName $DisplayNameMD  -DisplayName $DisplayNameMD 
    # Интеграция с Центром Идентификации, Сервисом Подписи, Сервисом Аудита, Сервисом Обработки Документов (указывается $DNSName сервера, где располагаются данные компоненты)
    Set-MdagProperties -DisplayName $ApplicationNameMD -IdpBaseAddress https://$DNSName/$ApplicationNameidp -SignServerBaseAddress https://$DNSName/$ApplicationNamess -DocumentStoreBaseAddress https://$DNSName/$ApplicationNameDS -AnalyticsBaseAddress "https://$DNSName/$ASAppName/"
    
    # Настройка отношений доверия с Центром Идентификации(Выполняется на ЦИ)
    Add-DssRelyingPartyTrust -DisplayName $DisplayNameidp -Name Mdag -Description "myDSS API Gateway" -Identities urn:cryptopro:dss:mdag:$DisplayNameMD
    
    # Настройка криптопровайдеров
    $ProviderType  = "80"
    $ProviderName = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider"
    # Регистрация профиля криптопровайдеров
    $idprovsts=(Add-DssCryptoProviderProfile -DisplayName $ApplicationNameidp -Type MyDss -PrimaryProviderName "$ProviderName" -PrimaryProviderType $ProviderType -Exportable -Name "CryptoProfile for myDSS SDK").Id 
    # Копирование профиля (при необходимости)
    # Copy-DssCryptoProviderProfile -DisplayName $ApplicationNameidp -NewProvName "Crypto-Pro GOST R 34.10-2012 HSM Svc CSPProxy HSM_Serv2" -ID $idprovsts.Guid
    
    # Настройка взаимодействия mDAG с DSS SDK:
    Set-DssMyDssProperties -DisplayName $DisplayNameidp  -MyDssServiceUrl https://"$DNSNameMdag"/$DisplayNameMD -MyDssKeyProtectionType Strong -NonceVerificationRequired 0
    # Включение возможности регистрации пользователей из мобильного приложения с требованием проверять уникальность отпечатка устройства пользователя
    Set-DssMyDSSProperties -DisplayName $DisplayNameidp  -MyDssSelfRegEnabled $true -DeviceFingerprintRequired $true
    
    # Включение метода аутентификации: 
    Enable-DssAuthenticationMethod -DisplayName $ApplicationNameidp -Id 16
    
    
    
    # Дополнительные настройки
    #callback о завершении транзакции
    $TransportPIDFSMS= (Add-DssStsPlugin -DisplayName $DisplayNameidp -PluginTypeName  "CryptoPro.DSS.Identity.Authentication.Notification.HttpTransportPlugin,CryptoPro.DSS.Identity.Authentication.Notification" -PluginType AuthenticationResult -Settings @{} ).ID
    #Настройка плагина форматирования
    $FormaterPIDFSMS= (Add-DssStsPlugin -DisplayName $DisplayNameidp -PluginTypeName  "CryptoPro.DSS.Identity.Authentication.Notification.AuthenticationResultFormatter,CryptoPro.DSS.Identity.Authentication.Notification" -PluginType Formatter -Settings @{} ).ID
    #Добавление модуля оповещения
    Add-DssStsNotifier -DisplayName $DisplayNameidp -TransportPluginID $TransportPIDFSMS -NotifierType AuthenticationResultCallback
    
    #Настройка транспортного плагина и модуля оповещения для режима асинхронной подписи
    $AuthNotifySS = Add-DssSignServerPlugin -Displayname $ApplicationNamess -PluginTypeName "CryptoPro.DSS.Identity.Authentication.Notification.HttpTransportPlugin,CryptoPro.DSS.Identity.Authentication.Notification" -PluginType AuthenticationResult -Settings @{}
    Add-DssSignServerNotifier -Displayname $ApplicationNamess  -TransportPluginID $AuthNotifySS.ID -NotifierType AuthenticationResultCallback -Settings @{} -Type "CryptoPro.DSS.Identity.Authentication.Notification.AuthenticationResultNotifier,CryptoPro.DSS.Identity.Authentication.Notification"
    

    Мобильное приложение DSS Client

    # Настройка Сервиса взаимодействия с DSS SDK для DSS Client и иных приложений на базе DSS SDK
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/mDAG/scenario.html
    
    # Внимание! Для каждого приложения нужен отдельный mDAG + mydssSystem
    # Например, если требуется использовать одновременно с одним сервером DSS мобильные приложения DSS Client и myDSS 2.0, необходимо создать и настроить собственный экземпляр mDAG для каждого приложения.
    # Для этого необходимо предварительно задать новые зачения для переменных $ApplicationNameMD и $DisplayNameMD и выполните командлеты для создания mDAG
    
    # Порт для взаимодействия мобильного приложения с mDAG
    # Внимание! На указанном порту должен быть привязан сертификат, выданный аккредитованным УЦ. Подробнее: https://dss.cryptopro.ru/docs/adminguide/mDAG/scenario.html
    $mdag_port="4432"
    # Строка адреса mDAG для последующей настройки
    $MyDssAddress = "https://"+ $DNSNameMdag + ":" + $mdag_port + "/" + $DisplayNameMD
    
    # Рассылка PUSH-уведомлений с использованием PUSH Proxy
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/redist/pushproxy.html
    # Имя модуля
    $ModuleName =$DisplayName + "pushmodule_dssclient"
    # Логин для аутентфикации
    $AuthLogin = $DisplayName + "pushlogin_dssclient"
    # Пароль для аутентфикации
    $AuthPassword =$DisplayName + "pushpass_dssclient"  
    # Имя экземпяра 
    $InstanceName =  "pushproxy"    
    
    # Ключ для PUSH-уведомлений Google
    $dssclient_GoogleServiceKey= ""
    # Данные для PUSH-уведомлений Apple
    $pushproxy_P8PrivateKeyFile =""
    $pushproxy_TeamId =""
    $pushproxy_P8PrivateKeyId =""
    $AppBundleIdentifier= ""
    
    # Создание веб-приложения
    Install-DssPushProxyInstance -InstanceName $InstanceName -SiteName "Default Web Site"
    # Создание модуля
    New-DssPushProxyModule -ModuleName $ModuleName -AuthLogin $AuthLogin -AuthPassword $AuthPassword
    # Интеграция с APNS 
    Set-DssPushProxyApn -ModuleName $ModuleName -AppBundleIdentifier $AppBundleIdentifier -TeamId $pushproxy_TeamId -P8PrivateKeyId $pushproxy_P8PrivateKeyId  -P8PrivateKeyFile $pushproxy_P8PrivateKeyFile
    # Интеграция с FCM
    Set-DssPushProxyFcm -ModuleName $ModuleName -GoogleServiceKey $dssclient_GoogleServiceKey
    # Включение модуля APN
    Enable-DssPushProxyApn -ModuleName $ModuleName
    # Включение модуля FCM
    Enable-DssPushProxyFcm -ModuleName $ModuleName
    # Перезапуск экземпляра Центра Идентификации
    Restart-DssStsInstance -DisplayName $ApplicationNameidp 
    # Регистрация плагина рассылки PUSH-уведомлений
    $Global:systemID = (Add-MyDssSystem -DisplayName $DisplayNameidp -Name $DisplayName  -MyDssAddress $MyDssAddress  -PushType PushProxy -PushProxyLogin $AuthLogin -PushProxyPassword $AuthPassword -PushProxyAddress "http://$DNSName/$InstanceName/$ModuleName" ).ID
    
    # Настройка Oauth-аутентификации для взаимодействия с mDAG
    $client_mdag = (Get-DssClient -DisplayName $DisplayNameidp | where { $_.ExtendedProperties -ne $null -and $_.ExtendedProperties["MyDssSystemId"] -eq $systemID}).ClientId
    Set-DssClient -DisplayName $DisplayNameidp -ClientId $client_mdag -GenerateSecret 
    $secret_mdag = (Get-DssClientSecret -DisplayName $DisplayNameidp -ClientId $client_mdag).value
    Set-MdagProperties -DisplayName $DisplayNameMD -ClientId $client_mdag -ClientSecret $secret_mdag
    
    #Настройка шаблонов Push-уведомлений
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 234 -MyDssSystemId $systemID -Text "Подтвердите данные учётной записи" -Payload '{ "app-event-type":"users.state.changed", "title_loc_key": "notification.user.info.changed", "loc_key": "notification.user.accept", "title": "Изменились данные подписи", "body": "Подтвердите данные учётной записи", "userID": "{0:UserID}"}'
    ## 1.3. Устройство заблоĸировано на сервере:
    ## myDssDeviceLocked = 320
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 320 -MyDssSystemId $systemID -Text "Профиль устройства заблокирован на сервере" -Payload '{ "app-event-type":"users.state.changed", "title_loc_key": "notification.user.state.changed", "loc_key": "notification.user.blocked", "title": "Изменился статус профиля", "body": "Профиль устройства заблокирован на сервере", "userID": "{0:UserID}"}'
    ## 1.4. Устройство разблоĸировано на сервере:
    ## myDssDeviceUnlocked = 321,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 321 -MyDssSystemId $systemID -Text "Профиль устройства разблокирован на сервере" -Payload '{ "app-event-type":"users.state.changed", "title_loc_key": "notification.user.state.changed", "loc_key": "notification.user.unblocked", "title": "Изменился статус профиля", "body": "Профиль устройства разблокирован на сервере", "userID": "{0:UserID}"}'
    ## 2.1. Сертифиĸат выпущен: 
    ## CertificateInstalled = 58
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 58 -MyDssSystemId $systemID -Text "Изменился статус сертификата" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.issued", "title": "Изменился статус сертификата", "body": " Сертификат выпущен и готов к работе", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 270 CertificateRequestOperationExecuted
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 270 -MyDssSystemId $systemID -Text "Изменился статус сертификата" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.issued", "title": "Изменился статус сертификата", "body": " Сертификат выпущен и готов к работе", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ##  20 CertificateCreated 
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 20 -MyDssSystemId $systemID -Text "Изменился статус сертификата" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.issued", "title": "Изменился статус сертификата", "body": " Сертификат выпущен и готов к работе", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    # 2.2. Истёĸ сроĸ действия сертифиĸата:
    ## 2.3. Действие сертифиĸата приостановлено:
    ## CertificateHold = 49,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 49 -MyDssSystemId $systemID -Text "Действие сертификата приостановлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.hold", "title": "Изменился статус сертификата", "body": "Действие сертификата приостановлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 284 HoldCertificateOperationExecuted
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 284 -MyDssSystemId $systemID -Text "Действие сертификата приостановлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.hold", "title": "Изменился статус сертификата", "body": "Действие сертификата приостановлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 2.4. Действие сертифиĸата возобновлено: 
    ## CertificateUnhold = 50,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 50 -MyDssSystemId $systemID -Text "Действие сертификата возобновлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.unhold", "title": "Изменился статус сертификата", "body": "Действие сертификата возобновлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 286 UnHoldCertificateOperationExecuted
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 286 -MyDssSystemId $systemID -Text "Действие сертификата возобновлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.unhold", "title": "Изменился статус сертификата", "body": "Действие сертификата возобновлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 3.1. Доступны операции для подтверждения 
    ## SecondaryAuthLogin = 92,
    ## SecondaryAuthSign = 93,
    ## SecondaryAuthSignDocs = 94,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 93 -MyDssSystemId $systemID -Text "Доступна новая операция для подтверждения" -Payload '{"app-event-type":"operations.new", "loc_key": "notification.operation.available", "body": "Доступна новая операция для подтверждения", "userID": "{0:UserID}", "transactionID": "{0:TransactionId}"}'
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 94 -MyDssSystemId $systemID -Text "Доступна новая операция для подтверждения" -Payload '{"app-event-type":"operations.new", "loc_key": "notification.operation.available", "body": "Доступна новая операция для подтверждения", "userID": "{0:UserID}", "transactionID": "{0:TransactionId}"}'
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 92 -MyDssSystemId $systemID -Text "Доступна новая операция для подтверждения" -Payload '{"app-event-type":"operations.new", "loc_key": "notification.operation.available", "body": "Доступна новая операция для подтверждения", "userID": "{0:UserID}", "transactionID": "{0:TransactionId}"}'
    
    # Не забудьте добавить лицензию на компоненты ЦИ!
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/setting/license/sts.html
    

    Мобильное приложение myDSS 2.0

    # Настройка Сервиса взаимодействия с DSS SDK для работы с мобильным приложением myDSS 2.0
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/mDAG/scenario.html
    #
    #Указать путь к CaPolicy в настройках mDAG:
    Set-MdagProperties -DisplayName $DisplayNameMD -CaMatadataPath <Путь к файлу capolicy>
    #
    # Порт для взаимодействия мобильного приложения с mDAG
    # Внимание! На указанном порту должен быть привязан сертификат, выданный аккредитованным УЦ. Подробнее: https://dss.cryptopro.ru/docs/adminguide/mDAG/scenario.html
    $mdag_port="4432"
    # Строка адреса mDAG для последующей настройки
    $MyDssAddress = "https://"+ $DNSNameMdag + ":" + $mdag_port + "/" + $DisplayNameMD
    
    # Настройка PUSH-уведомлений для myDSS 2.0
    # Доступны следующие сценарии (): 
        # Рассылка PUSH-уведомлений напрямую из Центра Идентификации
        # Рассылка PUSH-уведомлений с использованием PUSH Proxy
    
    # Рассылка PUSH-уведомлений напрямую из Центра Идентификации
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/notification/PUSH.html
    #
    # Ключ для PUSH-уведомлений Google
    $GoogleServiceKey= ""
    # Данные для PUSH-уведомлений Apple
    $ApnClientCertPath =""
    $ApnClientCertPassword=""
    # Настройка плагинов рассылки PUSH-уведомлений
    $systemID= (Add-MyDssSystem -DisplayName $DisplayNameidp -Name $DisplayName -GoogleServiceKey $GoogleServiceKey -MyDssAddress $MyDssAddress -ApnClientCertPath "$ApnClientCertPath" -ApnClientCertPassword $ApnClientCertPassword -PushType IdentityService).ID
    
    # Рассылка PUSH-уведомлений с использованием PUSH Proxy
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/redist/pushproxy.html
    #
    # Имя модуля
    $ModuleName =$DisplayName + "pushmodule_safetech"
    # Логин для аутентификации
    $AuthLogin = $DisplayName + "pushlogin_safetech"
    # Пароль для аутентификации
    $AuthPassword =$DisplayName + "pushpass_safetech"   
    # Имя экземпяра 
    $InstanceName =  "pushproxy"    
    # Ключ для PUSH-уведомлений Google
    $dssclient_GoogleServiceKey= ""
    # Данные для PUSH-уведомлений Apple
    $pushproxy_P8PrivateKeyFile =""
    $pushproxy_TeamId =""
    $pushproxy_P8PrivateKeyId =""
    $AppBundleIdentifier= "ru.safe-tech.mydss"
    # Данные для PUSH-уведомлений HMS
    $HmsClientId = ""
    $HmsClientSecret = ""
    # Создание веб-приложения
    Install-DssPushProxyInstance -InstanceName $InstanceName -SiteName "Default Web Site"
    # Создание модуля
    New-DssPushProxyModule -ModuleName $ModuleName -AuthLogin $AuthLogin -AuthPassword $AuthPassword
    # Интеграция с APNS 
    Set-DssPushProxyApn -ModuleName $ModuleName -AppBundleIdentifier $AppBundleIdentifier -TeamId $pushproxy_TeamId -P8PrivateKeyId $pushproxy_P8PrivateKeyId  -P8PrivateKeyFile $pushproxy_P8PrivateKeyFile
    # Интеграция с FCM
    Set-DssPushProxyFcm -ModuleName $ModuleName -GoogleServiceKey $dssclient_GoogleServiceKey
    # Включение модуля APN
    Enable-DssPushProxyApn -ModuleName $ModuleName
    # Включение модуля FCM
    Enable-DssPushProxyFcm -ModuleName $ModuleName
    # Включение модуля HMS 
    Enable-DssPushProxyHms -ModuleName $ModuleName
    # Перезапуск экземпляра Центра Идентификации
    Restart-DssStsInstance -DisplayName $ApplicationNameidp 
    # Регистрация плагина рассылки PUSH-уведомлений
    $Global:systemID = (Add-MyDssSystem -DisplayName $DisplayNameidp -Name $DisplayName  -MyDssAddress $MyDssAddress  -PushType PushProxy -PushProxyLogin $AuthLogin -PushProxyPassword $AuthPassword -PushProxyAddress "http://$DNSName/$InstanceName/$ModuleName" ).ID
    
    # Настройка Oauth-аутентификации для взаимодействия с mDAG 
    $client_mdag = (Get-DssClient -DisplayName $DisplayNameidp | where { $_.ExtendedProperties -ne $null -and $_.ExtendedProperties["MyDssSystemId"] -eq $systemID}).ClientId
    Set-DssClient -DisplayName $DisplayNameidp -ClientId $client_mdag -GenerateSecret 
    $secret_mdag = (Get-DssClientSecret -DisplayName $DisplayNameidp -ClientId $client_mdag).value
    Set-MdagProperties -DisplayName $DisplayNameMD -ClientId $client_mdag -ClientSecret $secret_mdag
    
    #Настройка шаблонов Push-уведомлений (подходит для любого выбранного способа рассылки PUSH-уведомлений)
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 234 -MyDssSystemId $systemID -Text "Подтвердите данные учётной записи" -Payload '{ "app-event-type":"users.state.changed", "title_loc_key": "notification.user.info.changed", "loc_key": "notification.user.accept", "title": "Изменились данные подписи", "body": "Подтвердите данные учётной записи", "userID": "{0:UserID}"}'
    ## 1.3. Устройство заблоĸировано на сервере:
    ## myDssDeviceLocked = 320
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 320 -MyDssSystemId $systemID -Text "Профиль устройства заблокирован на сервере" -Payload '{ "app-event-type":"users.state.changed", "title_loc_key": "notification.user.state.changed", "loc_key": "notification.user.blocked", "title": "Изменился статус профиля", "body": "Профиль устройства заблокирован на сервере", "userID": "{0:UserID}"}'
    ## 1.4. Устройство разблоĸировано на сервере:
    ## myDssDeviceUnlocked = 321,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 321 -MyDssSystemId $systemID -Text "Профиль устройства разблокирован на сервере" -Payload '{ "app-event-type":"users.state.changed", "title_loc_key": "notification.user.state.changed", "loc_key": "notification.user.unblocked", "title": "Изменился статус профиля", "body": "Профиль устройства разблокирован на сервере", "userID": "{0:UserID}"}'
    ## 2.1. Сертифиĸат выпущен: 
    ## CertificateInstalled = 58
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 58 -MyDssSystemId $systemID -Text "Изменился статус сертификата" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.issued", "title": "Изменился статус сертификата", "body": " Сертификат выпущен и готов к работе", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 270 CertificateRequestOperationExecuted
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 270 -MyDssSystemId $systemID -Text "Изменился статус сертификата" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.issued", "title": "Изменился статус сертификата", "body": " Сертификат выпущен и готов к работе", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ##  20 CertificateCreated 
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 20 -MyDssSystemId $systemID -Text "Изменился статус сертификата" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.issued", "title": "Изменился статус сертификата", "body": " Сертификат выпущен и готов к работе", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    # 2.2. Истёĸ сроĸ действия сертифиĸата:
    ## 2.3. Действие сертифиĸата приостановлено:
    ## CertificateHold = 49,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 49 -MyDssSystemId $systemID -Text "Действие сертификата приостановлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.hold", "title": "Изменился статус сертификата", "body": "Действие сертификата приостановлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 284 HoldCertificateOperationExecuted
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 284 -MyDssSystemId $systemID -Text "Действие сертификата приостановлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.hold", "title": "Изменился статус сертификата", "body": "Действие сертификата приостановлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 2.4. Действие сертифиĸата возобновлено: 
    ## CertificateUnhold = 50,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 50 -MyDssSystemId $systemID -Text "Действие сертификата возобновлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.unhold", "title": "Изменился статус сертификата", "body": "Действие сертификата возобновлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 286 UnHoldCertificateOperationExecuted
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 286 -MyDssSystemId $systemID -Text "Действие сертификата возобновлено" -Payload '{ "app-event-type":"certificates.state.changed", "title_loc_key": "notification.certificate.state.changed", "loc_key": "notification.certificate.unhold", "title": "Изменился статус сертификата", "body": "Действие сертификата возобновлено", "userID": "{0:UserID}", "certificateID": "{0:CertificateID}", "certificateRequestID": "{0:RequestID}"}'
    ## 3.1. Доступны операции для подтверждения 
    ## SecondaryAuthLogin = 92,
    ## SecondaryAuthSign = 93,
    ## SecondaryAuthSignDocs = 94,
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 93 -MyDssSystemId $systemID -Text "Доступна новая операция для подтверждения" -Payload '{"app-event-type":"operations.new", "loc_key": "notification.operation.available", "body": "Доступна новая операция для подтверждения", "userID": "{0:UserID}", "transactionID": "{0:TransactionId}"}'
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 94 -MyDssSystemId $systemID -Text "Доступна новая операция для подтверждения" -Payload '{"app-event-type":"operations.new", "loc_key": "notification.operation.available", "body": "Доступна новая операция для подтверждения", "userID": "{0:UserID}", "transactionID": "{0:TransactionId}"}'
    Add-DssPushFormatterTemplate -DisplayName $DisplayNameidp -EventID 92 -MyDssSystemId $systemID -Text "Доступна новая операция для подтверждения" -Payload '{"app-event-type":"operations.new", "loc_key": "notification.operation.available", "body": "Доступна новая операция для подтверждения", "userID": "{0:UserID}", "transactionID": "{0:TransactionId}"}'
    

    Перезапуск пулов приложений

    # Перезапуск пулов приложений
    Restart-DssDocumentStoreInstance -DisplayName $ApplicationNameDS
    Restart-DssAnalyticsServiceInstance -DisplayName $ASAppName
    Restart-DssFeInstance -DisplayName $ApplicationName
    Restart-DssSignServerInstance -DisplayName $ApplicationNamess
    Restart-DssStsInstance -DisplayName $ApplicationNameidp
    Restart-MdagInstance -DisplayName $ApplicationNameMD
    

    Резервирование аудита

    # Резервирование аудита
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/auditrecords/auditbackup.html
    Import-Module WebAdministration
    
    # Резервирование аудита Сервиса Подписи
    $notifiers = (Get-DssSTSNotifier -DisplayName $DisplayNameidp)
    $audit = $notifiers | Where type -eq Audit
    $pathPrefix = "C:\Audit_Reserve\"
    $targetDir = $pathPrefix + $DisplayNamess + '\'
    New-Item -ItemType directory -Path $targetDir
    Set-DssSignServerNotifier -DisplayName $DisplayNamess -Settings @{"FolderPath" = $targetDir} -NotifierID $audit.Id;
    $appPoolName = 'CryptoProDSS-1-' + $DisplayNamess;
    $appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPoolName).applicationPoolSid
    $identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
    $user = $identifier.Translate([System.Security.Principal.NTAccount])
    $acl = Get-ACL $targetDir
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit,ObjectInherit", "None", "Allow");
    $acl.SetAccessRule($accessRule);
    Set-Acl $targetDir $acl
    
    # Резервирование аудита Центра Идентификации
    $notifiers = (get-DssSignServerNotifier -DisplayName $DisplayNamess)
    $audit = $notifiers | Where type -eq Audit
    $targetDir = $pathPrefix + $DisplayNameidp + '\';
    New-Item -ItemType directory -Path $targetDir
    Set-DssSTSNotifier -DisplayName $DisplayNameidp -Settings @{"FolderPath" = $targetDir} -NotifierID $audit.Id;
    $appPoolName = 'CryptoProDSS-1-' + $DisplayNameidp;
    $appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPoolName).applicationPoolSid
    $identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
    $user = $identifier.Translate([System.Security.Principal.NTAccount])
    $acl = Get-ACL $targetDir
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit,ObjectInherit", "None", "Allow");
    $acl.SetAccessRule($accessRule);
    Set-Acl $targetDir $acl
    
    # Резервирование аудита Сервиса Обработки Документов
    $notifiers = ( Get-DssDocumentStoreNotifier -DisplayName $DisplayNameDS )
    $audit = $notifiers | Where type -eq Audit
    $targetDir = $pathPrefix + $DisplayNameDS  + '\';
    New-Item -ItemType directory -Path $targetDir
    set-DssDocumentStoreNotifier -DisplayName $DisplayNameDS  -Settings @{"FolderPath" = $targetDir} -NotifierID $audit.Id;
    $appPoolName = 'CryptoProDSS-1-' + $DisplayNameDS;
    $appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPoolName).applicationPoolSid
    $identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
    $user = $identifier.Translate([System.Security.Principal.NTAccount])
    $acl = Get-ACL $targetDir
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit,ObjectInherit", "None", "Allow");
    $acl.SetAccessRule($accessRule);
    Set-Acl $targetDir $acl
    

    Кластер

    # Настройка КриптоПро DSS в кластере
    # Ниже приведены командлеты для настройки дополнительного узла кластера
    # Необходимо скопировать все переменные, используемые для создания основного узла
    # Внимание! для корректной работы серверов под управлением Microsoft IIS требуется настроить шифрование файлов 
    # cookie. Подробнее: http://dss.cryptopro.ru/docs/adminguide/setting/cookieenc.html
    
    
    
    # Cтроки для подключения к БД. Необходимо выбрать только один блок команд.
    #
    # Подключение удаленной БД с Windows-аутентификацией 
    $connInfoSS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$SSdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -UseExistingDb
    # connection_string to STS database
    $connInfoSTS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$STSdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword  -UseExistingDb
    # connection_string to AnalyticsService database
    $connInfoAS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$Asdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -UseExistingDb
    # connection_string to DocumentStore database
    $connInfoDS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$DSdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -UseExistingDb
    # connection_string to Operations database for SignServer
    $connInfoOS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$OPdb" -AccountType Windows -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -UseExistingDb
    #
    # Cтроки подключения к удаленной БД с SQL-аутентификацией 
    # connection_string to SignServer database
    $connInfoSS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$SSdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword  -AsUser  $AsUser -AsUserPassword  $AsUserPassword -UseExistingDb
    # connection_string to STS database
    $connInfoSTS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$STSdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword   -AsUser  $AsUser -AsUserPassword  $AsUserPassword -UseExistingDb
    # connection_string to AnalyticsService database
    $connInfoAS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$Asdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -AsUser  $AsUser -AsUserPassword  $AsUserPassword -UseExistingDb
    # connection_string to DocumentStore database
    $connInfoDS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$DSdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -AsUser  $AsUser -AsUserPassword  $AsUserPassword -UseExistingDb
    # connection_string to Operations database for SignServer
    $connInfoOS = New-DssSqlConnectionInfo -ServerName $SQLServerName -DatabaseName "$OPdb" -AccountType SQL -ServiceAccountName $SQLServiceAccountName -ServiceAccountPassword $SQLServiceAccountPassword -AsUser  $AsUser -AsUserPassword  $AsUserPassword -UseExistingDb
    
    
    
    # Добавление экземпляра Сервиса Подписи
    New-DssSignServerInstance -DisplayName $DisplayNamess -ApplicationName $ApplicationNamess -SiteName "$SiteName" -ConnectionInfo $connInfoSS
    # Ввод лицензии на Сервис Подписи (см. бланк лицензии)
    # Внимание! Требуется ввести лицензию типа "На дополнительный сервер"
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/setting/license/signserver.html
    #Серийный номер
    $SerialNumberSignServerLicense =""
    #Имя компании
    $CompanyNameSignServerLicense = ""
    Add-DssLicense -DisplayName $DisplayNamess -SerialNumber $SerialNumberSignServerLicense -CompanyName  $CompanyNameSignServerLicense
    
    # Добавление экземпляра Центра Идентификации
    New-DssStsInstance -DisplayName $DisplayNameidp -ApplicationName $ApplicationNameidp -SiteName "$SiteName" -ConnectionInfo $connInfoSTS
    # Добавление экземпляра Сервиса Аудита
    New-DssAnalyticsServiceInstance -SiteName "$SiteName" -ApplicationName $ASAppName -DisplayName $ASAppName -ConnectionInfo $connInfoAS 
    
    
    
    #Создание экземпляра Веб-интерфейса Пользователя
    #Подробнее тут http://dss.cryptopro.ru/docs/adminguide/Frontend/scenario.html
    New-DssFEInstance -DisplayName $DisplayName -ApplicationName $ApplicationName -SiteName "Default Web Site"
    # Добавление отпечатка сертификата Веб-интерфейса Пользователя + Настройка адресов Сервиса Подписи и Центра Идентификации
    Set-DssFEProperties -DisplayName $DisplayName -ServiceCertificate $fethumbprint -SignServerAddress "https://$DNSName/$DisplayNamess" -StsAddress "https://$DNSName/$ApplicationNameidp/Active.svc/service" -AnalyticsServiceAddress "https://$DNSName/$ASAppName"
    #Регистрация на Веб-интерфейсе Пользователя Центра Идентификации в качестве доверенного издателя маркеров безопасности:
    Add-DssFEClaimsProviderTrust -DisplayName $DisplayName -IssuerName realsts -Thumbprint $idpthumbprint
    #Настройка на Центре Идентификации доступа по OpenID Connect
    #Получаем Secret для клиента с ид сryptopro.dss.frontend.$DisplayName
    $Secret =(get-DssClientSecret -DisplayName $DisplayNameidp  -ClientId  сryptopro.dss.frontend.$DisplayName).Value
    set-DssClient -DisplayName $DisplayNameidp  -AllowedFlow  ClientCredentials, AuthorizationCode, TokenExchange  -RedirectUri "https://$DNSName/$DisplayName/Admins/Users/ExternalCallback", "https://$DNSName/$DisplayName/Users/ExternalCallback" -ClientId   сryptopro.dss.frontend.$DisplayName
    Set-DssFeOidcSettings -DisplayName $DisplayName -Issuer "https://$DNSName/$ApplicationNameidp" -Realm "https://$DNSName/$DisplayName" -ClientId сryptopro.dss.frontend.$DisplayName  -ClientSecret $Secret 
    
    # Внимание! Необходимо выдать права на доступ к закрытому ключу пулам приложений экземпляров сервисов
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/servicecertificates/privatekeyaccess.html
    
    
    
    # Настройка myDSS (API v1) 
    # Подробнее тут: https://dss.cryptopro.ru/docs/adminguide/mydss/intro.html
    # Необходимо задать следующие переменные или скопировать их из настроек для основного сервера
    $MydssInternalbd = "MydssInternalbd$DisplayName"
    $MydssExternalbd = "MydssExternalbd$DisplayName"
    $InternalInstance= "MyDssServerInternal$DisplayName"
    $ExternalInstance = "MyDssServerExternal$DisplayName"
    
    # Строки подключения для удаленной БД с Windows-аутентификацией 
    $connInfoMYDSSInternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssInternalbd  -AccountType Windows -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword   -UseExistingDb 
    $connInfoMYDSSExternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssExternalbd  -AccountType Windows -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword -UseExistingDb
    
    # Строки подключения для удаленной БД с SQL-аутентификацией 
    $connInfoMYDSSInternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssInternalbd -AsUser  $AsUser -AsUserPassword  $AsUserPassword -AccountType SQL        -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword   -UseExistingDb 
    $connInfoMYDSSExternal  =  New-DssSqlConnectionInfo -ServerName  $SQLServerName -DatabaseName $MydssExternalbd -AsUser  $AsUser -AsUserPassword  $AsUserPassword -AccountType SQL        -ServiceAccountName  $ServiceAccountName  -ServiceAccountPassword $ServiceAccountPassword -UseExistingDb
    
    # Создание экземпляров сервисов myDSS
    New-MyDssServerInternalInstance -SiteName "$SiteName" -DisplayName $InternalInstance  -ApplicationName "$InternalInstance" -ConnectionInfo $connInfoMYDSSInternal
    New-MyDssServerExternalInstance -SiteName "$SiteName" -DisplayName $ExternalInstance  -ApplicationName "$ExternalInstance" -ConnectionInfo $connInfoMYDSSExternal
    #В случае использования удаленной БД с Windows аутентфикацией необходимо настроить запуск службы  mydsssrv0(КриптоПро myDSS (MyDssServerExternal)) от имени учетной аписи, имеющей доступ к БД.
    
    
    
    # Настройка взаимодействия с DSS SDK (API v2)
    
    # Создание и настройка Сервиса Обработки Документов
    New-DssDocumentStoreInstance -ConnectionInfo $connInfoDS -ApplicationName $ApplicationNameDS -DisplayName $DisplayNameDS -SiteName 'Default Web Site'
    #Добавляем ссылку на Веб-интерфейсе Пользователя
    Set-DssFeProperties -DisplayName $ApplicationName -DocumentStoreAddress https://$DNSName/$ApplicationNameDS
    
    # Создание и настройка Cервиса взаимодействия с DSS SDK
    New-MdagInstance -SiteName 'Default Web Site' -DisplayName $DisplayNameMD -ApplicationName $ApplicationNameMD
    Set-MdagProperties -DisplayName $ApplicationNameMD -IdpBaseAddress https://$DNSName/$ApplicationNameidp -SignServerBaseAddress https://$DNSName/$ApplicationNamess -DocumentStoreBaseAddress https://$DNSName/$ApplicationNameDS -AnalyticsBaseAddress "https://$DNSName/$ASAppName/"
    $systemID = (Get-MyDssSystem -DisplayName $DisplayNameidp).id
    $client_mdag = (Get-DssClient -DisplayName $DisplayNameidp | where { $_.ExtendedProperties -ne $null -and $_.ExtendedProperties["MyDssSystemId"] -eq $systemID}).ClientId
    $secret_mdag = (Get-DssClientSecret -DisplayName $DisplayNameidp -ClientId $client_mdag).value
    Set-MdagProperties -DisplayName $DisplayNameMD -ClientId $client_mdag -ClientSecret $secret_mdag
    
    # Указать путь к CaPolicy в настройках mDAG:
    Set-MdagProperties -DisplayName $DisplayNameMD -CaMatadataPath <Путь к файлу capolicy>
    
    # Внимание! Необходимо выдать права на доступ к закрытому ключу пулам приложений экземпляров сервисов
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/servicecertificates/privatekeyaccess.html
    
    
    
    
    
    # Настройка резервирования аудита в кластере
    # Подробнее: https://dss.cryptopro.ru/docs/adminguide/auditrecords/auditbackup.html
    # Данные наборы командлетов отличаются от резервирования аудита при настройке основного сервера кластера
    #
    Import-Module WebAdministration
    #
    # Резервирование аудита Сервиса Подписи
    # Внимание! Путь в &pathPrefix должен совпадать с аналогичным путем на основном сервере кластера
    $pathPrefix = "C:\Audit_Reserve\"
    $targetDir = $pathPrefix + $DisplayNamess + '\';
    New-Item -ItemType directory -Path $targetDir
    $appPoolName = 'CryptoProDSS-1-' + $DisplayNamess;
    $appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPoolName).applicationPoolSid
    $identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
    $user = $identifier.Translate([System.Security.Principal.NTAccount])
    $acl = Get-ACL $targetDir
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit,ObjectInherit", "None", "Allow");
    $acl.SetAccessRule($accessRule);
    Set-Acl $targetDir $acl
    #
    # Резервирование аудита Центра Идентификации
    $pathPrefix = "C:\Audit_Reserve\"
    $targetDir = $pathPrefix + $DisplayNameidp + '\';
    New-Item -ItemType directory -Path $targetDir
    $appPoolName = 'CryptoProDSS-1-' + $DisplayNameidp;
    $appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPoolName).applicationPoolSid
    $identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
    $user = $identifier.Translate([System.Security.Principal.NTAccount])
    $acl = Get-ACL $targetDir
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit,ObjectInherit", "None", "Allow");
    $acl.SetAccessRule($accessRule);
    Set-Acl $targetDir $acl
    #
    #Резервирование аудита Сервиса Обработки Документов
    $pathPrefix = "C:\Audit_Reserve\"
    $targetDir = $pathPrefix + $DisplayNameDS + '\';
    New-Item -ItemType directory -Path $targetDir
    $appPoolName = 'CryptoProDSS-1-' + $DisplayNameDS;
    $appPoolSid = (Get-ItemProperty IIS:\AppPools\$appPoolName).applicationPoolSid
    $identifier = New-Object System.Security.Principal.SecurityIdentifier $appPoolSid
    $user = $identifier.Translate([System.Security.Principal.NTAccount])
    $acl = Get-ACL $targetDir
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit,ObjectInherit", "None", "Allow");
    $acl.SetAccessRule($accessRule);
    Set-Acl $targetDir $acl
    

    Разное

    Защита пулов приложений от выгрузки при простое

    # (Необязательно) Защита пулов приложений от выгрузки при простое
    # Получение имен пулов Центра Идентификации, Сервиса Подписи, Сервиса Аудита
    import-module WebAdministration
    $idp_poolname = (Get-ChildItem IIS:\AppPools|where {$_.Name -like "CryptoProDSS-1-$DisplayNameidp"}).name
    $ss_poolname = (Get-ChildItem IIS:\AppPools|where {$_.Name -like "CryptoProDSS-1-$DisplayNamess"}).name
    $audit_poolname = (Get-ChildItem IIS:\AppPools|where {$_.Name -like "CryptoProDSS-1-$ASAppName"}).name
    $mdag_poolname = (Get-ChildItem IIS:\AppPools|where {$_.Name -like "CryptoProDSS-1-$DisplayNameMD"}).name
    
    # Включение режима запуска AlwaysRunning + отключение таймаута простоя
    Set-ItemProperty IIS:\AppPools\$idp_poolname -Name startMode -Value 1
    Set-ItemProperty IIS:\AppPools\$idp_poolname -Name processModel.idleTimeout -Value "00:00:00"
    Set-ItemProperty IIS:\AppPools\$ss_poolname -Name startMode -Value 1
    Set-ItemProperty IIS:\AppPools\$ss_poolname -Name processModel.idleTimeout -Value "00:00:00"
    Set-ItemProperty IIS:\AppPools\$audit_poolname -Name startMode -Value 1
    Set-ItemProperty IIS:\AppPools\$audit_poolname -Name processModel.idleTimeout -Value "00:00:00"
    Set-ItemProperty IIS:\AppPools\$mdag_poolname -Name startMode -Value 1
    Set-ItemProperty IIS:\AppPools\$mdag_poolname -Name processModel.idleTimeout -Value "00:00:00"
    

    Ограничение размера запроса к серверу

    # Задание максимального размера запроса к серверу
    # В случае если используется кластер, необходимо выполнить команды на всех узлах кластера.
    $size="20971520"
    Set-DssEndpointGlobalSettings -DisplayName $DisplayNamess -MaxMessageSize $size
    Set-DssStsEndpointGlobalSettings -DisplayName $DisplayNameidp -MaxMessageSize $size
    Set-DssFeProperties -DisplayName $DisplayName -MaxIisContentLength $size
    Set-MdagEndpointGlobalSettings -DisplayName $ApplicationNameMD -MaxMessageSize $size
    Set-DssDocumentStoreProperties -DisplayName $DisplayNameDS -MaxMessageSize $size
    
    Restart-DssDocumentStoreInstance -DisplayName $ApplicationNameDS
    Restart-DssAnalyticsServiceInstance -DisplayName $ASAppName
    Restart-DssFeInstance -DisplayName $ApplicationName
    Restart-DssSignServerInstance -DisplayName $ApplicationNamess
    Restart-DssStsInstance -DisplayName $ApplicationNameidp
    Restart-MdagInstance -DisplayName $ApplicationNameMD
    

    Проверка работоспособности пулов приложений

    # Проверка работоспособности пулов приложений
    # Необходимо открыть данные адреса в браузере и убедиться, что при этом не возникла ошибка (кроме ошибки сертификата)
    # https://localhost/<ApplicationName Сервиса Подписи>/Signservice.svc
    # https://localhost/<ApplicationName Центра Идентификации>/Active.svc
    # https://localhost/<ApplicationName Сервиса Аудита>/AnalyticsService.svc
    # https://localhost/<ApplicationName Веб-интерфейса Пользователя>
    
    # Проверка работоспособности Сервиса взаимодействия с DSS SDK
    # Если было настроено взаимодействие с DSS SDK и используется мобильное приложение, после перехода по данной ссылке должны быть скачаны файлы.
    # https://localhost:<Порт для Сервиса взаимодействия с DSS SDK (mdag)>/sblogmdag/v1/policy
    # https://localhost/sblogds/api/debug
    
    В начало © ООО "КРИПТО-ПРО", 2000–2025