Я большой новичок в PowerShell, и это мой первый пост, поэтому я заранее извинюсь за отсутствие знаний и / или неправильное использование терминов ... Я потратил часы на поиск и пробу различных кодовфрагменты для создания сценария, который можно использовать для замены сотен SSL-сертификатов на наших веб-серверах IIS (7.5 и выше).До сих пор я обнаружил, что привязки SSL, по-видимому, хранятся в [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ HTTP \ Parameters \ SslBindingInfo].Следующий скрипт powershell позволяет мне извлечь все привязки IIS SSL, которые существуют на сервере, и простое сравнение CNames позволяет мне найти конкретные привязки, соответствующие обновляемому сертификату.Я также обнаружил, что могу вручную переопределить значение SslCertHash в разделах реестра под расположенным выше местоположением с другим отпечатком, и это изменяет привязку сертификата в IIS.Таким образом, кажется, что в powershell должен быть очень простой способ просто заменить текущий отпечаток на новый отпечаток в применимой привязке без необходимости извлекать IP-адрес, порт и / или siteID (у запущенного скрипта уже есть я в привязкеэкземпляр который мне нужно поменять).Я знаю, что есть несколько обходных способов изменить привязку, но мое ограниченное знакомство с PowerShell предполагает, что для этого должна существовать более прямая команда.Это просто желаемое за действительное?
Мой сценарий на данный момент:
Import-Module -Name WebAdministration
$SearchCName = '*myhost.domain.com*'
$NewCertThumbprint = '1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R9S0T'
Get-ChildItem -Path IIS:SSLBindings | ForEach-Object -Process {
if ($_.Sites)
{
$certificate = Get-ChildItem -Path CERT:LocalMachine/My |
Where-Object -Property Thumbprint -EQ -Value $_.Thumbprint
[PsCustomObject]@{
Sites = $_.Sites.Value
CertificateDnsNameList = $certificate.DnsNameList
CertificateNotAfter = $certificate.NotAfter
CertificateThumbprint = $certificate.Thumbprint
CertificateSubject = $certificate.Subject
CertificateIssuer = $certificate.Issuer
CertificateTPfromSSLBinding = $_.Thumbprint
CertificateBindingIPAddr = $_.IPAddress
CertificatePort = $_.Port
}
if ($certificate.Subject -like $SearchCName)
{ Write-Output 'True' }
Else
{ Write-Output 'False' }
}
}
Sample output:
Sites : testsite1
CertificateDnsNameList : {}
CertificateNotAfter : 2/16/2021 1:41:55 PM
CertificateThumbprint : 6DA6A25F5C756D710D033D1146A3097EE0E9F430
CertificateSubject : CN=testsite1.domain.com, OU=IT Security, O=My
Company, L=MyCity, S=MyState, C=US
CertificateIssuer : CN=My Company Internal CA, OU=PKI, O=My Company,
C=US
CertificateTPfromSSLBinding : 6DA6A25F5C756D710D033D1146A3097EE0E9F430
CertificateBindingIPAddr : 10.39.205.19
CertificatePort : 443
False
Sites : testsite2
CertificateDnsNameList : {}
CertificateNotAfter : 1/2/2022 4:39:12 PM
CertificateThumbprint : 6D2DC913256CCADBD3983773CAC20440D918F091
CertificateSubject : CN=testsite2.domain.com, OU=IT Security, O=My
Company, L=MyCity, S=MyState, C=US
CertificateIssuer : CN=My Company Internal CA, OU=PKI, O=My Company,
C=US
CertificateTPfromSSLBinding : 6D2DC913256CCADBD3983773CAC20440D918F091
CertificateBindingIPAddr : 10.39.205.24
CertificatePort : 443
False
Моя версия Powershell: Major Minor Build Revision
5 0 10586 117
Спасибо, Рэнди