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



我的web应用程序项目包含在一个IIS Express站点的保护伞下服务的多个web站点。我成功地遵循了Scott Hanselman的优秀博客文章,IIS Express成功地从同一个web应用程序根目录提供http://foo.local和http://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 -端口组合。

我如何制作一个SSL证书涵盖https://foo.local和https://bar.local,或者为每个站点"附加"一个?

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" />

(credit: Configure SNI On IIS8?)

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

New-SelfSignedCertificate -DnsName foo.local, bar.local -CertStoreLocation cert:LocalMachineMy

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

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

显然,一个IP-port组合只能应用一个SSL证书…

需要iis8或以上版本才能使用多个证书。IIS 8支持服务器名称指示(SNI)。请参阅IIS 8 (Windows Server 2012)的服务器名称指示(SNI)。


如何制作一个同时覆盖https://foo.localhttps://bar.local的SSL证书…

创建一个证书。在证书中,将两个名称都放在主题备选名称(SAN)中。在CN中放置一个友好的名称。

CN应该是一个友好的名称,因为:

  1. IETF不赞成在CN
  2. 中放置DNS名称
  3. CA/Browser论坛不赞成在CN中放置DNS名称
  4. CN经常显示给用户,所以他们应该是友好的

…或者为每个站点"附加"一个?

升级到IIS 8或Server 2012。


听从汉斯曼的建议…makecert -r -pe -n "CN=foo.local"

他的建议在这里是错误的。

相关内容

  • 没有找到相关文章

最新更新