Можно ли изменить отпечаток сертификата в IIS: привязки SSL с помощью powershell? - PullRequest
0 голосов
/ 11 октября 2018

Я большой новичок в 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

Спасибо, Рэнди

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...