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

8
我的网络应用项目包含了多个网站,这些网站都在一个单独的IIS Express站点下运行。我成功地按照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

那个成功了,但我无法为第二个站点重复这个过程。显然,只能将一个SSL证书应用于单个IP端口组合。如何制作一个涵盖https://foo.localhttps://bar.local的SSL证书,或者为每个站点“附加”一个?
2个回答

11

jww的答案指引我朝着正确的方向前进。除了Hanselman的指示外,这就是我需要做的。

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

<binding protocol="https" bindingInformation="*:443:foo.local" sslFlags="1" />
<binding protocol="https" bindingInformation="*:443:bar.local" sslFlags="1" />

(来源:如何在IIS8上配置SNI?)

然后,我没有使用makecert,而是使用PowerShell的New-SelfSignedCertificate命令:

New-SelfSignedCertificate -DnsName foo.local, bar.local -CertStoreLocation cert:\LocalMachine\My

(来源: 如何在Windows 8中创建自签名的SAN证书)

除此之外,我按照Hanselman的指示使用netsh http add sslcert...来“注册”IP端口的证书,并使用MMC“证书”插件将其设为可信任。


2
显然,只能将一个 SSL 证书应用于单个 IP 端口组合... 您需要使用 IIS 8 或以上版本来使用多个证书。IIS 8 支持服务器名称指示(SNI)。请参阅IIS 8(Windows Server 2012)中的服务器名称指示(SNI)
如何创建一个 SSL 证书,以覆盖 https://foo.localhttps://bar.local
可以创建一个证书,在该证书中将两个名称放在 Subject Alternate Name (SAN) 中。在 CN 中放置友好名称。
CN 应该是友好的名称,因为:
1. IETF 已经弃用在 CN 中放置 DNS 名称。 2. CA/Browser 论坛已经弃用在 CN 中放置 DNS 名称。 3. CN 经常显示给用户,因此应该是友好的。
"...或者为每个站点“附加”一个?"
升级至IIS 8或Server 2012。
根据Hanselman的建议... makecert -r -pe -n "CN=foo.local"
他的建议在这里是错误的。

1
谢谢,jww。最新的IIS Express利用了IIS 8的SNI支持,所以你给了我正确的方向。 - Bryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接