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

时间:2014-07-29 22:05:15

标签: ssl https iis-express netsh makecert

我的网络应用程序项目包含在单个IIS Express站点的保护下提供的多个网站。我成功地遵循了Scott Hanselman的excellent blog post,并且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 个答案:

答案 0 :(得分:9)

jww的回答让我朝着正确的方向前进。超越汉塞尔曼的instructions,这就是我必须做的事情。

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

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

(信用:Configure SNI On IIS8?

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

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

(信用:How to create a Self-Signed SAN Certificate in Windows 8

除此之外,我遵循Hanselman的指示使用netsh http add sslcert...来注册&#34; IP端口的证书,以及使用MMC&#34;证书&#34;管理单元以使其受信任。

答案 1 :(得分:2)

  

显然,只有一个SSL证书可以应用于单个IP端口组合...

您需要IIS 8或更高版本才能使用多个证书。 IIS 8支持服务器名称指示(SNI)。请参阅Server Name Indication (SNI) with IIS 8 (Windows Server 2012)


  

如何制作涵盖https://foo.localhttps://bar.local ...

的SSL证书

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

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

  1. IETF弃用了在CN
  2. 中放置DNS名称
  3. 不建议使用CA /浏览器论坛在CN
  4. 中放置DNS名称
  5. CN经常向用户显示,因此他们应该友好

  6.   

    ...或其他&#34;附加&#34;每个网站一个?

    升级到IIS 8或Server 2012。


      

    遵循汉塞尔曼的建议...... makecert -r -pe -n "CN=foo.local"

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