У меня есть очень простой скрипт Powershell для обновления сертификатов SSL. Мы используем краткосрочный SSL, и это повторяющийся процесс. На нашем TSG (Terminal Server Gateway) я автоматизировал часть сертификата IIS без сбоев, однако у меня возникли проблемы с тем же на шлюзе.
Я попробовал два варианта:
# $NewThumb obtained elsewhere from the certificate
$settings = Get-WmiObject `
-class "Win32_TSGatewayServerSettings" `
-namespace "root\cimv2\TerminalServices" `
-ComputerName "localhost" `
-Authentication 6 -ErrorAction SilentlyContinue
if ($settings){
$h="Not Available"
$settings | fl # test ONE
if ($settings.CertHash){
# convert binary to hex ascii
$h=""; $settings.CertHash | % {$H+=$_.Tostring("X2") }
}
write-host "TH: $NewThumb CH: $h"
if ($NewThumb -eq $h){
write-host "We have the correct certificate"
}else {
# convert back to byte array
$certthumbprint= for ( $i=0; $i -lt $NewThumb.length; $i+=2) { [System.Convert]::ToByte($NewThumb.Substring( $i,2),16) }
$settings.SetCertificate($certthumbprint) | Out-Null
# test if change is effective
$settings = Get-WmiObject `
-class "Win32_TSGatewayServerSettings" `
-namespace "root\cimv2\TerminalServices" `
-ComputerName "localhost" `
-Authentication 6 -ErrorAction SilentlyContinue
$settings | fl
write-host "$($MySelf) New SSL Certificate Installed."
}
Результат, ДО
__GENUS : 2 __CLASS : Win32_TSGatewayServerSettings __SUPERCLASS : __DYNASTY : Win32_TSGatewayServerSettings __RELPATH : Win32_TSGatewayServerSettings.MaxConnections=4294967295 __PROPERTY_COUNT : 23 __DERIVATION : {} __SERVER : TSG __NAMESPACE : root\cimv2\TerminalServices __PATH :\\TSG\root\cimv2\TerminalServ...... adminMessageEndTime : adminMessageStartTime : adminMessageText : AuthenticationPluginCLSID : AuthenticationPluginDescription : AuthenticationPluginName : native AuthorizationPluginCLSID : AuthorizationPluginDescription : AuthorizationPluginName : native CentralCAPEnabled : False CertHash : consentMessageText : EnforceChannelBinding : True IsConfigured : True MaxConnections : 4294967295 MaximumAllowedConnectionsBySku : 4294967295 MaxLogEvents : 7 MaxProtocols : 2 OnlyConsentCapableClients : False RequestSOH : False SkuName : Windows Server Datacenter SslBridging : 0 UnlimitedConnections : True PSComputerName : TSG
Результат, ПОСЛЕ
..... removed CertHash : {185, 13, 12, 196...} ..... removed
теперь второй вариант (элегантный, меньше кода):
# $NewThumb obtained elsewhere from the certificate
Import-Module RemoteDesktopServices -ErrorAction SilentlyContinue
write-host "Before"
$th=Get-Item -Path RDS:\GatewayServer\SSLCertificate\Thumbprint
$th | fl
Set-Item RDS:\GatewayServer\SSLCertificate\Thumbprint -Value $NewThumb
write-host "after"
$TH=Get-Item -Path RDS:\GatewayServer\SSLCertificate\Thumbprint
$th | fl
Перед
Certhash
НОЛЬ
После
Certhash
{185, 13, 12, 196 ...}
Моя проблема заключается в том, что при запуске любого из методов Thumbprint правильно установлен и отображается как в «After», но, если я снова запускаю скрипт, в обоих случаях Thumbprint изначально равен NULL. Похоже, что в SQL отсутствует фиксация.
Я запускаю это удаленно с помощью команды invoke на сервере tsg.
Вы можете использовать команды модуля RemoteDesktop, чтобы установить этот сертификат для вас.
Либо загрузить из файла PFX на диск
$Password = ConvertTo-SecureString -String "yourPFXpassword" -AsPlainText -Force
Set-RDCertificate -Role RDGateway -ImportPath "C:\Certificates\NewCert.pfx" -Password $Password
Или загрузить из сертификата, уже находящегося в вашем хранилище сертификатов
Set-RDCertificate -Role RDGateway -Thumbprint aedd995b45e633d4ef30fcbc8f3a48b627e9a28c