【问题标题】:How configure SSL for an IIS Express site that uses multiple hostnames?如何为使用多个主机名的 IIS Express 站点配置 SSL?
【发布时间】:2014-07-29 22:05:15
【问题描述】:

我的 Web 应用程序项目包含多个网站,这些网站在单个 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 证书,或者为每个站点“附加”一个?

【问题讨论】:

    标签: ssl https iis-express netsh makecert


    【解决方案1】:

    jww 的回答让我朝着正确的方向前进。除了 Hanselman 的 instructions,这就是我必须做的事情。

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

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

    (信用:Configure SNI On IIS8?

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

    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... 为 IP 端口“注册”证书,并使用 MMC“证书”管理单元使其受信任。

    【讨论】:

      【解决方案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 中放置 DNS 名称
      2. CA/浏览器论坛不赞成在 CN 中放置 DNS 名称
      3. CN 经常向用户显示,因此应该友好

      ...或以其他方式为每个站点“附加”一个?

      升级到 IIS 8 或 Server 2012。


      听从 Hanselman 的建议...makecert -r -pe -n "CN=foo.local"

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

      【讨论】:

      • 谢谢,jww。最新的 IIS Express 充分利用了 IIS 8 的 SNI 支持,因此您引导我朝着正确的方向前进。
      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2022-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多