Статус: Новичок
Группы: Участники
Зарегистрирован: 01.10.2018(UTC) Сообщений: 5 Сказал(а) «Спасибо»: 1 раз
|
Здравствуйте! Пытаюсь настроить УЦ на Windows Server 2012r2. При добавлении роли Сервер ЦС в по завершению шагов в визарде при регистрации сборок появляется ошибка: Цитата:The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: RegAsm : error RA0000 : An error occurred while writing the registration information to the registry. Administrator permissions are needed to use the selected options. Use an administrator command prompt to complete these tasks. Диспетчер УЦ открываю от имени администратора, авторизован также с админской учетки. Пробовал вручную через regasm зарегистрировать сборку CertificateService.KeySrv.dll, но ошибка не изменилась. В чем может быть дело? Какие пути решения возможны? Приложил лог: Zhurnal vypolnenija mastera.log (19kb) загружен 2 раз(а).Этот же лог в спойлере:
$InstallPaths = @() $SqlInstance = '.\CPCC' $SqlDatabaseName = 'CertificateService.Database' $WebSite = '1' $AuthSubject = 'CN=crypto_cs, INN=500100732999, OGRN=1117746358999' $ProviderType = '80' $ProviderName = 'Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider' $HashAlgorithm = '1.2.643.7.1.1.2.2' $Validity = 'Years:5' $RAHostName = 'Crypto.vDV.digdes.com' $RenewallTemplate = '<?xml version="1.0" encoding="utf-16"?> <Pki xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://cryptopro.ru/pki/2010/10/policy"> <Templates> <Template MinorRevision="0" SchemaVersion="0"> <General-Enrollment-IsRootCA>true</General-Enrollment-IsRootCA> <CriticalExtension>2.5.29.15</CriticalExtension> <KeyUsage Value="DigitalSignature KeyCertSign CrlSign" /> <Extension-CrlDistributionPoints /> <Extension-AuthorityInfoAccess /> <PkiCertificateApplicationPolicy>false</PkiCertificateApplicationPolicy> </Template> </Templates> <Rdns /> <Strings /> </Pki>' $AuthPersonSubject = 'CN=crypto_cs' $Account = 'CRYPTO\Administrator' $Password = '**********' $IncludeAuthPersonNameInSan = '0' $KeyContainerName = 'ca8031b9-90e2-494a-825a-3a602e18442e' $KeyLength = '512' $TemplateId = '1.2.643.2.2.46.0.0' $Password1 = '**********' $Password2 = '**********' $CommonName = 'Веб-сервер' $DnsName = @('Crypto.vDV.digdes.com') $Value = 'localhost\crypto_cs' $KeyContainerName1 = 'd983419e-1c77-49e6-8b7c-b27e9da25b50' $CertTemplate = '1.2.643.2.2.46.0.4' $HttpsPort = '443' $Name = 'crypto_cr' $HostName = 'Crypto.vDV.digdes.com' $Password3 = '**********' $KeyContainerName2 = '0facdbd5-1024-448e-b46d-19fff68cff87' $CertTemplate1 = '1.2.643.2.2.46.0.5' $Config = 'localhost\crypto_cs' $Password4 = '**********'
function GetAuthorityAttribute { param( [parameter(Mandatory=$true)]$Authority, [parameter(Mandatory=$true)]$Attribute ) if ($Authority.PSObject.Properties[$Attribute]) { return ($Authority.$Attribute) } else { Write-Error -Message "Не найден атрибут $Attribute у объекта $Authority" } }
function GetCertAdminClient { $ca = Get-Item CA:/ $cawcf = $ca.CAWcfPath if($cawcf -eq $null) { $cawcf = 'CA' }
$baseRemoteAddress = ('http://localhost/' + $cawcf)
[CryptoPro.PkiClient.AssemblyResolver]::Load('CertificateService.Client') > $null; $certadmin = (new-object CertificateService.Client.ClientWcf -ArgumentList @($baseRemoteAddress)).CreateCertAdminClient()
return $certadmin }
function ConfigureCdpAia { param( $CAName, $RAHostName, [switch]$RAHasCDP, [switch]$RAHasAIA) if ($RAHasCDP -or $RAHasAIA) { Write-Progress 'ConfigureCdpAia' 'Настройка точек публикации CRL и сертификатов ЦС' -CurrentOperation $baseRemoteAddress
$certadmin = GetCertAdminClient
if ($RAHasCDP) { $e = $certadmin.GetConfigEntry($CAName, 'CRLPublicationURLs', '') $e.EntryType = 'StringList' $e.StringListValue = [string[]]($e.StringListValue + ('6:http://' + $RAHostName + '/cdp/%17%9.crl')) $certadmin.SetConfigEntry($CAName, 'CRLPublicationURLs', $e, '') } if ($RAHasAIA) { $e = $certadmin.GetConfigEntry($CAName, 'CACertPublicationURLs', '') $e.EntryType = 'StringList' $e.StringListValue = [string[]]($e.StringListValue + ('2:http://' + $RAHostName + '/aia/%17.crt')) $certadmin.SetConfigEntry($CAName, 'CACertPublicationURLs', $e, '') } $certadmin.ServerControl($CAName, 'ApplyConfiguredSettings') $certadmin.Dispose() } }
function ConfigCARenewallTemplate { param($CA,$RenewallTemplateXml)
Write-Progress 'RenewalExtensions' 'Запись настроек расширений сертификатов ЦС' -CurrentOperation $baseRemoteAddress $certadmin = GetCertAdminClient $entry = $certadmin.GetConfigEntry($ca.Name, 'RenewallExtensions', '') $entry.EntryType = 'String' $entry.StringValue = $RenewallTemplateXml $certadmin.SetConfigEntry($ca.Name, 'RenewallExtensions', $entry, '') $certadmin.ServerControl($ca.Name, 'ApplyConfiguredSettings') $certadmin.Dispose()
Write-Verbose -message 'Запись настроек расширений сертификатов ЦС успешно завершена.' }
function GetPSPath { param( [parameter(Mandatory=$true)]$PSObject, [parameter(Mandatory=$false)]$MemberName ) return ($PSObject.PSPath + '\' + $MemberName) }
function ConfigCaIncludeAuthPersonNameInSan { param($CA, $IncludeAuthPersonNameInSan)
Write-Progress 'IncludeAuthPersonNameInSan' 'Запись настройки ЦС (включение имени адм. ЦС в SAN)' -CurrentOperation $baseRemoteAddress $certadmin = GetCertAdminClient $entry = $certadmin.GetConfigEntry($CA.Name, 'IncludeAuthPersonNameInSan', '') $entry.EntryType = 'Numeric' $entry.NumericValue = $IncludeAuthPersonNameInSan $certadmin.SetConfigEntry($ca.Name, 'IncludeAuthPersonNameInSan', $entry, '') $certadmin.ServerControl($ca.Name, 'ApplyConfiguredSettings') $certadmin.Dispose()
Write-Verbose -message 'Запись настройки ЦС (включение имени адм. ЦС в SAN) успешно завершена.' }
function DisableAuthPersonCerts { param($Path) Write-Verbose -message 'Запрет использования старых сертификатов' $AP = get-item $Path $CA = get-item (get-item $AP.PSParentPath).PSParentPath if($AP.SigningCerts.Count -gt 0) { $certs = ($AP.SigningCerts | Sort-Object CertVersionId | Select -First ($AP.SigningCerts.Count - 1))
[CryptoPro.PkiClient.AssemblyResolver]::Load('CertificateService.Client') > $null; $keyadminclient = [CertificateService.Client.CertKeyAdminFactory]::GetClient('localhost') foreach($cert in $certs) { $keyadminclient.ControlSigningCert($CA.Name, $cert.CertVersionId, ([CryptoPro.ComTypes.SigningCertControls]::DisableCertificateIssuing)) } } }
function AcquireAuthPersonKey { param( $Path, $Pin, $Password)
Write-Verbose -message 'Загрузка ключа администратора'
$AP = get-item $Path $CA = get-item (get-item $AP.PSParentPath).PSParentPath
Start-Sleep -Seconds 4 [CryptoPro.PkiClient.AssemblyResolver]::Load('CertificateService.Client') > $null; $keyadminclient = [CertificateService.Client.CertKeyAdminFactory]::GetClient('localhost', $AP.Account, $Password) # $CertVersionId = ($ap.SigningCerts[$ap.SigningCerts.Count-1]).CertVersionId # $ap.SigningCerts is not updated afrer New-CACertificate:( $CertVersionId = $keyadminclient.GetSigningCertCount($CA.Name) - 1
$params = @($CA.Name, $CertVersionId, $Pin, ([CryptoPro.ComTypes.AuthorityKeyUsage]::Certificate -bor [CryptoPro.ComTypes.AuthorityKeyUsage]::Crl)) #$keyadminclient.GetType().GetMethod('AcquirePrivateKey').Invoke($keyadminclient, $params) [System.__ComObject].InvokeMember('AcquirePrivateKey',[System.Reflection.BindingFlags]::InvokeMethod,$null,$keyadminclient,$params) }
function GetAuthPersonSignCertByX509Cert { param( $Path, $Certificate)
Write-Verbose -message 'Предоставление сертификата подписи администратора'
$AP = get-item $Path $AP.SigningCerts | foreach { if ($_.SstCertificate.X509Certificate.Thumbprint -eq $Certificate.Thumbprint) { return $_ } } }
Install-CA -Path $InstallPaths -SqlInstance $SqlInstance -SqlDatabaseName $SqlDatabaseName -WebSite $WebSite -KeepDatabase:$False Start-Sleep -Seconds '4' $CADrive = Get-Item -Path 'CA:\' $CA = New-Item -Path 'CA:\' -Subordinate:$False -Subject $AuthSubject -ProviderType $ProviderType -ProviderName $ProviderName -HashAlgorithm $HashAlgorithm -Validity $Validity -Verbose $CAName = GetAuthorityAttribute -Authority $CA -Attribute 'Name' ConfigureCdpAia -CAName $CAName -RAHostName $RAHostName -RAHasCDP -RAHasAIA ConfigCARenewallTemplate -CA $CA -RenewallTemplate $RenewallTemplate $AuthPersonPath = GetPSPath -PSObject $CA -MemberName 'AuthPerson' $AuthPerson = New-Item -Path $AuthPersonPath -Subject $AuthPersonSubject -Account $Account -Password $Password -Force ConfigCaIncludeAuthPersonNameInSan -CA $CA -IncludeAuthPersonNameInSan $IncludeAuthPersonNameInSan $AuthPersonPath = GetPSPath -PSObject $AuthPerson $AuthPersonX509Certificate = ( New-CACertificate -Path $AuthPersonPath -KeyContainerName $KeyContainerName -KeyLength $KeyLength -TemplateId $TemplateId -Password $Password1 -ExistingKey:$False -DeleteExistingRequest -Binary -PromptForMedia -PassThruCertReq -Offline:$False -Verbose) if($AuthPersonX509Certificate -eq $null) { Write-Verbose -message 'Не удалось изготовить сертификат.' } else { if($AuthPersonX509Certificate.GetType().Name -eq 'X509Certificate2') { Write-Verbose -message 'Сертификат изготовлен!' } else { if(($AuthPersonX509Certificate -ne $null) -and (($AuthPersonX509Certificate -is [int]) -eq $False)) { Write-Verbose -message 'Запрос на сертификат отправлен на вышестоящий ЦС' } else { Write-Warning -message 'Не удалось изготовить сертификат. На следующем шаге будет предложено сохранить файл запроса.' } } } if($AuthPersonX509Certificate -ne $null -and $AuthPersonX509Certificate.GetType().Name -eq 'X509Certificate2') { DisableAuthPersonCerts -Path $AuthPersonPath } if($AuthPersonX509Certificate -ne $null -and $AuthPersonX509Certificate.GetType().Name -eq 'X509Certificate2') { AcquireAuthPersonKey -Path $AuthPersonPath -Password $Password2 } if($SigningCert -eq $null -and $AuthPersonX509Certificate -ne $null -and $AuthPersonX509Certificate.GetType().Name -eq 'X509Certificate2') { $SigningCert = GetAuthPersonSignCertByX509Cert -Path $AuthPersonPath -Certificate $AuthPersonX509Certificate } $WebProfile = Set-PkiServer -ProfileName $CA.SubjectName -CommonName $CommonName -DnsName $DnsName -PassThru Set-Variable -Name 'WebCertReqConfig' -Value $Value $WebRawRequest = New-PkiRequest -MachineKeySet -KeyContainerName $KeyContainerName1 -ProviderType $ProviderType -ProviderName $ProviderName -KeyLength $KeyLength -HashAlgorithm $HashAlgorithm -CertTemplate $CertTemplate -ExistingKey:$False -Silent:$False -PromptForMedia $RawResponse = Send-PkiRequest -RawRequest $WebRawRequest -Config $WebCertReqConfig -ProfileName $WebProfile | Receive-PkiResponse -Config $WebCertReqConfig $WebCertPath = $null if(($RawResponse -ne $null) -and (($RawResponse -is [int]) -eq $False)) { $WebCertPath = Install-PkiResponse -RawResponse $RawResponse -MachineKeySet Start-Sleep -Seconds '5' } $WebX509Certificate = $null if($WebCertPath -ne $null) { $WebX509Certificate = Get-Item -Path $WebCertPath } $EnabledCertPath = $null if($WebCertPath -ne $null) { Start-Sleep -Seconds '5' $EnabledCertPath = Enable-PkiServer -CertPath $WebCertPath -WebSite $WebSite -HttpsPort $HttpsPort -PassThru } $RegAuthPath = GetPSPath -PSObject $CA -MemberName 'RegAuthority' $RegAuth = New-Item -Path $RegAuthPath -Name $Name -HostName $HostName -ProfileName $CA.SubjectName -Account $Account -Password $Password3 -Verbose $RegAuthRawRequest = New-PkiRequest -MachineKeySet -KeyContainerName $KeyContainerName2 -ProviderType $ProviderType -ProviderName $ProviderName -KeyLength $KeyLength -HashAlgorithm $HashAlgorithm -CertTemplate $CertTemplate1 -ExistingKey:$False -Silent:$False -PromptForMedia $RegAuthRawResponse = Send-PkiRequest -RawRequest $RegAuthRawRequest -Config $Config -ProfileName $RegAuth.ProfileName | Receive-PkiResponse -Config $Config $RegAuthX509Certificate = $null if(($RegAuthRawResponse -ne $null) -and (($RegAuthRawResponse -is [int]) -eq $False)) { ConvertTo-PkiContainer -RawResponse $RegAuthRawResponse -MachineKeySet -KeyContainerName $KeyContainerName2 -ProviderType $ProviderType -ProviderName $ProviderName | Write-Debug $RegAuthX509Certificate = Get-PkiResponseCertificate -RawResponse $RegAuthRawResponse } $RegAuthX509CertificateMapped = $null $X509CertPath = GetPSPath -PSObject $RegAuth -MemberName 'Certificate' if($RegAuthX509Certificate -ne $null) { $RegAuthX509CertificateMapped = New-Item -Path $X509CertPath -Certificate $RegAuthX509Certificate -Password $Password4 Start-Sleep -Seconds '5' } ПОДРОБНО: Строка соединения: Data Source=.\CPCC;Integrated Security=True;Pooling=True;MultipleActiveResultSets=True ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Экземпляр SQL Server: .\CPCC. Целевая база данных: CertificateService.Database.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Changed database context to 'CertificateService.Database'.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Отключение асинхронного режима обновления статистики (AUTO_UPDATE_STATISTICS_ASYNC)...
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Завершение фоновых заданий обновления статистики...
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Асинхронный режим обновления статистики отключен, фоновые потоки заданий обновления статистики завершены.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : База данных CertificateService.Database переводится в режим SINGLE_USER...
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : База данных переведена в режим SINGLE_USER.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Выполняется создание резервной копии базы данных...
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Имя файла резервной копии: CertificateService.Database_2018-10-01T15-04-44.500.bak
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 11 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 21 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 31 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 41 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 51 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 61 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 71 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 81 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 91 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Processed 400 pages for database 'CertificateService.Database', file 'CertificateService.Database' on file 1.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : 100 percent processed.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Processed 3 pages for database 'CertificateService.Database', file 'CertificateService.Database_log' on file 1.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : BACKUP DATABASE successfully processed 403 pages in 0.041 seconds (76.672 MB/sec).
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Резервная копия базы данных успешно создана.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Changed database context to 'master'.
ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Создание новой базы данных...
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Changed database context to 'CertificateService.Database'.
ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Выполнено создание новой базы данных, версия 16.
ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Текущая версия базы данных 16, выполняется проверка наличия обновлений базы данных...
ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Обновлений не найдено.
ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Выполнение завершающего скрипта...
ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Завершающий скрипт выполнен.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : База данных переведена в режим MULTI_USER.
ПОДРОБНО: CryptoPro.DbMigrator Verbose: 0 : Включен асинхронный режим обновления статистики (AUTO_UPDATE_STATISTICS_ASYNC).
ПОДРОБНО: CryptoPro.DbMigrator Information: 0 : Работы над целевой базой данных CertificateService.Database успешно выполнены. Прошедшее время 00:00:14.809.
ПОДРОБНО: Выполнена операция "Разворачивание базы данных службы сертификатов" для объекта "CertificateService.Database" ПОДРОБНО: Выполнена операция "Инициализация центра cертификации" для объекта "CertificateService.Database" ПОДРОБНО: Выполнена операция "Установка политики инфраструктуры открытых ключей по умолчанию" для объекта "CertificateService.Database" ПОДРОБНО: Выполнена операция "Регистрация библиотеки типов:" для объекта "CertificateService.ComTypes.Microsoft.tlb" ПОДРОБНО: Выполнена операция "Регистрация сборки" для объекта "CryptoPro.ComTypes.dll" ПОДРОБНО: Выполнена операция "Регистрация сборки" для объекта "CertificateService.KeySrv.dll" ОШИБКА: The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: RegAsm : error RA0000 : An error occurred while writing the registration information to the registry. Administrator permissions are needed to use the selected options. Use an administrator command prompt to complete these tasks.
|