如何在 Windows 2016 上使用 Powershell IISAdministration 模块为 IIS 网站设置需要 SSL

How to set Require SSL for an IIS web site using Powershell IISAdministration module on Windows 2016

在 Windows 2016 年,尝试将新的 IISAdministration 模块用于 Powershell(而非 WebAdministration),如何为特定网站设置 Require Ssl 复选框?

C:\Windows\System32\inetsrv\config\applicationHost.config 中找到的 system.webserver/security/access 参考,这是在使用 IIS 管理器时保存复选框值的地方,给定网站的 SSL 设置:

<location path="MySite">
    <system.webServer>
        <security>
            <access sslFlags="Ssl" />
        </security>
    </system.webServer>
</location>

为后代回答我自己的问题。

IISAdministration 的 New-IISSiteBinding cmdlet 让我很困惑。

  1. 首先,这不是我默认 Windows 2016 的一部分(从 aws 图像加载),所以我必须先更新到 IISAdministration 1.1 Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force 然后 Install-Module -Name IISAdministration -Force。您不能使用 Update-Module,因为 IISAdministration 1.0 没有随 NuGet 一起安装,它是 Win 2016 的一部分。

  2. 其次,SslFlag 属性与 Require SslSslFlags 无关。 New-IISSiteBinding 上的 SslFlag 可以设置为 None, Sni, CentralCertStore。在IIS Manager中,相当于点了一个网站,然后右边的Bindingslink,然后是Add/Edit,然后是checkbox"Require Server Name Indication".

IISAdministration cmdlet Get-IISConfigSection 是所需要的。以下代码在网站上设置 Require Ssl(在 IIS 管理器中相当于单击网站,然后单击 SSL 设置图标,"Require SSL" 复选框):

Import-Module IISAdministration
$ConfigSection = Get-IISConfigSection -SectionPath "system.webServer/security/access" -Location "MyWebSite"
#to set:
Set-IISConfigAttributeValue -AttributeName sslFlags -AttributeValue Ssl -ConfigElement $ConfigSection
#to read:
Get-IISConfigAttributeValue -ConfigElement $ConfigSection -AttributeName sslFlags

这些也可以通过管道传输。此 sslFlags 的可能值为:None、Ssl、SslNegotiateCert、SslRequireCert、SslMapCert、Ssl128(参见 Access Security access

对于需要客户端证书的那些,适当的设置是 "Ssl, SslNegotiateCert, SslRequireCert"

    <system.webServer>
        <security>
            <access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
        </security>
    </system.webServer>