переформатирование `GCI IIS: \ SSLBindings`, чтобы избежать усечения - PullRequest
0 голосов
/ 20 февраля 2020

На моем сервере Windows 2016 есть 8 сайтов IIS. 6 защищены одним и тем же сертификатом multi-SAN, а 2 имеют разные сертификаты.

GCI IIS:\SSLBindings усекает список с многоточием:

    IP Address          Port   Host Name        Store            Sites
    ----------          ----   ---------        -----            -----
                        443                     CentralCertStore QA.ARIAUTODIRECT.COM
                                                                 QA.ARIBUYDIRECT.COM
                                                                 QA.ARIDEALERDIRECT.CA
                                                                 QA.ARIDEALERDIRECT.COM
                                                                 QA.ARITRUCKDIRECT.COM
                                                                 ...
    0.0.0.0             443                     WebHosting       QA.ARIAUTODIRECT.COM

Каждый сайт в первой группе имеет привязку SSL для *: 443: имя хоста - т.е. все IP-адреса, порт 443, требуют SNI и имя хоста указано. Последняя привязка - это привязка по умолчанию, при этом SNI не требуется и имя хоста не указано, используется для старых браузеров, не поддерживающих SNI.

Вывод, который мне действительно хотелось бы видеть, это, отформатированный для отчетов по электронной почте:

    IP Address          Port   Host Name (SNI)          Store            SiteName
    ----------          ----   ---------                -----            -----
    *                   443    QA.ARIAUTODIRECT.COM     CentralCertStore QA.ARIAUTODIRECT.COM
    *                   443    QA.ARIBUYDIRECT.COM      CentralCertStore QA.ARIBUYDIRECT.COM
    *                   443    QA.ARIDEALERDIRECT.CA    CentralCertStore QA.ARIDEALERDIRECT.CA
    *                   443    QA.ARIDEALERDIRECT.COM   CentralCertStore QA.ARIDEALERDIRECT.COM
    *                   443    QA.ARITRUCKDIRECT.COM    CentralCertStore QA.ARITRUCKDIRECT.COM
    *                   443    QA.VR.ARITRUCKDIRECT.COM CentralCertStore QA.VR.ARITRUCKDIRECT.COM
    *                   443    OPSSCQA.ARIFLEET.COM     CentralCertStore OPS -SC- QA
    0.0.0.0             443    -none-                   WebHosting       QA.ARIAUTODIRECT.COM

Я взламывал скрипт PowerShell, пытаясь преодолеть предупреждения о невозможности изменить $null в строку или целое число в строку, et c., Et c , Поэтому я делаю шаг назад и спрашиваю, есть ли какой-нибудь очевидный способ сделать это, который я пропускаю.

В качестве примера, вот что я попробовал. Он отображает только имя места, и заголовки отсутствуют.

PS C:\windows\system32> dir iis:\sslbindings |%{ 
    $x = $_; $paths = $x.Sites |%{ $_.ItemXPath.Split("'")[1]}; 
    Add-Member -inputobject $_ -membertype NoteProperty -Name "SiteName" -Value $paths; 
    $_.SiteName } |FT
QA.ARIAUTODIRECT.COM
QA.ARIBUYDIRECT.COM
QA.ARIDEALERDIRECT.CA
QA.ARIDEALERDIRECT.COM
QA.ARITRUCKDIRECT.COM
QA.VR.ARIAUTODIRECT.COM
OPS -SC- QA
ARIXSSQA
QA.ARIAUTODIRECT.COM

РЕДАКТИРОВАТЬ: Результаты @ thepip3r answer попытки. (Возможно, я удалю это редактирование позже, так как оно не добавляет к вопросу, но позволяет дать хорошо отформатированный ответ на ответ thepip3r)

как указано:

IpAddress    : 
Port         : 443
Hostname_SNI : 
Store        : CentralCertStore
Site         : {QA.ARIAUTODIRECT.COM, QA.ARIBUYDIRECT.COM, QA.ARIDEALERDIRECT.CA, QA.ARIDEALERDIRECT.COM...}

IpAddress    : 0.0.0.0
Port         : 443
Hostname_SNI : 0.0.0.0
Store        : WebHosting
Site         : QA.ARIAUTODIRECT.COM

когда FT добавляется в конвейер:

IpAddress Port Hostname_SNI Store            Site                                                                                         
--------- ---- ------------ -----            ----                                                                                         
           443              CentralCertStore {QA.ARIAUTODIRECT.COM, QA.ARIBUYDIRECT.COM, QA.ARIDEALERDIRECT.CA, QA.ARIDEALERDIRECT.COM...}
0.0.0.0    443 0.0.0.0      WebHosting       QA.ARIAUTODIRECT.COM

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

ЛУЧШИЙ ОТВЕТ

Get-WebBinding дает гораздо лучшее решение, чем IIS:\WebBindings.

 Get-WebBinding -Protocol https `
   |%{ 
      $bi = $_.bindingInformation.Split(":");
      [PsCustomObject]@{
        'IpAddress' = $bi[0]
        'Port' = $bi[1]
        'Hostname_SNI' = $bi[2]
        Store = $( if ($_.sslFlags -eq 3) {"CentralCertStore"} else {$_.certificatestorename} )
        SiteName = $_.ItemXPath.split("'")[1]
      }
    } |ft

Результаты:

IpAddress     Port Hostname_SNI            Store            SiteName               
---------     ---- ------------            -----            --------               
*             443                          WebHosting       QA.ARIAUTODIRECT.COM   
*             443  qa.ariautodirect.com    CentralCertStore QA.ARIAUTODIRECT.COM   
*             443  qa.aribuydirect.com     CentralCertStore QA.ARIBUYDIRECT.COM    
*             443  qa.aridealerdirect.ca   CentralCertStore QA.ARIDEALERDIRECT.CA  
*             443  qa.aridealerdirect.com  CentralCertStore QA.ARIDEALERDIRECT.COM 
*             443  qa.aritruckdirect.com   CentralCertStore QA.ARITRUCKDIRECT.COM  
*             443  qa.vr.ariautodirect.com CentralCertStore QA.VR.ARIAUTODIRECT.COM
*             443  OPSSCQA.ARIFLEET.COM    CentralCertStore OPS -SC- QA            
10.220.100.98 443  arixssqa.arifleet.com   CentralCertStore ARIXSSQA            

ПРЕДЫДУЩИЙ ОТВЕТ

Благодаря 2 вещам, которые я узнал из ответа @ thepip3r (Split-Path -Leaf и [pscustomobject]@{...}), я преодолел проблемы форматирования . Осталась пустая проблема Hostname_SNI, связанная с свертыванием привязок. Я думаю, потому что каждая привязка использует *: 443, SNI и CCS, она объединяет их. Это все еще немного необъяснимо, потому что у этих привязок действительно есть имена хостов. Но сейчас я доволен этим.

import-module webadministration
dir iis:\sslbindings `
 |%{ $Binding = $_
     $Binding.Sites.ItemXPath |%{ $_.split("'")[1] } `
     |% { 
        [pscustomobject]@{
            'IpAddress'    = $( $ip = $Binding.IpAddress.IpAddressToString; if ([String]::IsNullOrWhiteSpace($ip)) { "*" } else { $ip } )
            'Port'         = $Binding.Port
            'Hostname_SNI' = $( $h = ($Binding.PSPath | Split-Path -Leaf).Split('!')[0]; if ([String]::IsNullOrWhiteSpace($h)) { "--none--" } else {$h} )
            'Store'        = $Binding.Store
            'SiteName'     = $_
        }
     }
 } |ft

Вывод:

IpAddress Port Hostname_SNI Store            SiteName               
--------- ---- ------------ -----            --------               
*          443 --none--     CentralCertStore QA.ARIAUTODIRECT.COM   
*          443 --none--     CentralCertStore QA.ARIBUYDIRECT.COM    
*          443 --none--     CentralCertStore QA.ARIDEALERDIRECT.CA  
*          443 --none--     CentralCertStore QA.ARIDEALERDIRECT.COM 
*          443 --none--     CentralCertStore QA.ARITRUCKDIRECT.COM  
*          443 --none--     CentralCertStore QA.VR.ARIAUTODIRECT.COM
*          443 --none--     CentralCertStore OPS -SC- QA            
*          443 --none--     CentralCertStore ARIXSSQA               
0.0.0.0    443 0.0.0.0      WebHosting       QA.ARIAUTODIRECT.COM  
1 голос
/ 20 февраля 2020

Первая попытка:

Import-Module WebAdministration

$SslBindings = @(gci IIS:\SslBindings)

if ($SslBindings.count -gt 0) {
    foreach ($Binding in $SslBindings) {
        [pscustomobject]@{
            'IpAddress'    = $Binding.IpAddress.IpAddressToString
            'Port'         = $Binding.Port
            'Hostname_SNI' = ($Binding.PSPath | Split-Path -Leaf).Split('!')[0]
            'Store'        = $Binding.Store
            'Site'         = $Binding.Sites.Value
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...