如何为使用多个主机名的IIS Express站点配置SSL?

Bry*_*yan 7 ssl https makecert netsh iis-express

我的Web应用程序项目包含在单个IIS Express站点的保护下提供的多个Web站点.我成功地遵循了Scott Hanselman的优秀博客文章,并且IIS Express成功地从同一个Web应用程序根目录提供了http://foo.localhttp://bar.local.

但是,我需要两个站点都支持SSL.根据Hanselman的建议,我可以创建一个SSL证书并将其"附加"到一个IP端口组合.

makecert -r -pe -n "CN=foo.local" -b 01/01/2000 -e 01/01/2036 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
netsh http add sslcert ipport=0.0.0.0:443 appid='{214124cd-d05b-4309-9af9-9caa44b2b74b}' certhash=284475d4a4eb5c4d3ab7da4fdefa928186482376
Run Code Online (Sandbox Code Playgroud)

这成功了,但我无法重复第二个站点的过程.显然,只有一个SSL证书可以应用于单个IP端口组合.

如何制作涵盖https://foo.localhttps://bar.local的SSL证书,或以其他方式为每个站点"附加"一个?

Bry*_*yan 9

jww的回答让我朝着正确的方向前进.除了汉塞尔曼的指示,这就是我必须做的事情.

首先,我在IIS Express的applicationhosts.config中启用了我的站点绑定上的SNI.这只是意味着附加sslFlags属性:

<binding protocol="https" bindingInformation="*:443:foo.local" sslFlags="1" />
<binding protocol="https" bindingInformation="*:443:bar.local" sslFlags="1" />
Run Code Online (Sandbox Code Playgroud)

(信用:在IIS8上配置SNI?)

然后makecert,我使用PowerShell的New-SelfSignedCertificatecmdlet 创建了一个自签名证书,而不是使用它:

New-SelfSignedCertificate -DnsName foo.local, bar.local -CertStoreLocation cert:\LocalMachine\My
Run Code Online (Sandbox Code Playgroud)

(信用:如何在Windows 8中创建自签名SAN证书)

除此之外,我按照Hanselman的指示使用netsh http add sslcert..."注册"IP端口的证书,并使用MMC"证书"管理单元使其受信任.