IIS7:无法使用SSL证书和端口443在站点上设置主机名


47

考虑带有IIS7的Win 2008 SP2计算机。任务是将证书和主机名应用于此计算机上的一个站点。该网站的主机标头必须为abc.123.example.com

第一步是将.pfx安装到个人存储中,这已成功。

IIS7将该证书视为可用,但不允许输入主机名。即使在选择我的证书之前,主机名文本框也始终被禁用/显示为灰色。我什至删除了默认的端口80绑定。

网站绑定

问题:如何为该站点设置主机名?这个证书是通配符证书吗?我知道SSL请求进入Web服务器,并且数据包中的主机标头已加密。为什么然后IIS6允许指定主机头,但不允许IIS7?

更新:证书不是问题的一部分。我在计算机上创建了一个新站点,并且在选择https绑定时,禁用了主机名文本框。

Answers:



45

它确实可以在GUI中工作...

只要确保您要安装的证书的“友好名称”与您为证书创建的多域名相同即可。

即。* .companydomain.com

如果为* .companydoman.com证书输入了“好记的名称”,则在将证书安装到IIS时,它将使主机名标题框变灰。

如果使用* .companyname.com作为友好名称,那么您会很高兴。

繁荣。


14
感谢您的提示!如果其他人无法从IIS重命名证书(可以吗?),则可以在MMC证书管理单元中重命名该证书。只需加载MMC,添加“证书”管理单元,然后选择“计算机帐户”,“本地计算机”。加载“证书”管理单元后,可以浏览到“证书(本地计算机)>个人>证书”,然后右键单击以选择证书上的“属性”。将“友好名称”字段更改为* .yoursite.com并重新加载IIS管理器管理单元
Garrett

4
友好名称似乎只需要以“ *”开头,但之后可以包含您想要的其他任何名称。在我的情况下,我有一个对多个不同域有效的证书,该域除了* .com以外没有共同的根,并给出了友好的名称,因为友好名称似乎很奇怪。因此,我最终在这里将其称为*-我的描述性名称。感谢@Garrett提供的重命名提示!
wojtow

这是真正的答案。尼斯
乔·菲利普斯

@Garrett这是否意味着如果我使用了“我的域SSL”之类的友好名称,即使主机名字段为空,也仍然可以使用。当我丢失主机名时,这确实使我感到震惊,但是我的4个通配符子域似乎可以与重新发布的SSL一起正常使用?显然,使用“ * .mydomain.com”作为友好名称仅允许您查看主机名,但在幕后,这两个选项均应起作用。否则,IIS应该明确告诉我们使用限定的域名而不是友好名称?
查尔斯·罗伯逊

10

简短的回答是,每个IP只能绑定一个证书,因此无论将什么主机名定向到该IP地址,证书绑定都将适用。能够指定主机名意味着您可以在同一IP地址和端口上具有多个主机名和证书组合(就像使用非SSL条目一样),但这不是这种情况,因此该字段不可用。

更完整的解释是SSL会对您的流量进行加密,而其中一部分流量是浏览器发送到服务器的HTTP标头。这些标头之一就是“主机”标头,IIS用来确定要向哪个站点加载请求。由于在发送请求标头之前需要加载证书以建立安全连接,因此IIS必须仅基于IP地址和端口号选择证书,而将“主机”标头留在外面作为确定因素要加载的网站,所以他们不允许您输入一个。

这是一篇文章,概述了SSL连接内部工作原理


谢谢您的回答,贾斯汀。我仍然不确定为什么IIS7不允许我指定主机标头,即使我选择列表中的IP地址之一也是如此。IIS6确实没有任何问题。如前所述,这是计算机上唯一的站点。
p.campbell

2
主机标头可以使用通配符证书或多域“ UC”证书:sslshopper.com/unified-communications-uc-ssl-certificates.html。在这种情况下,即使有多个主机名,服务器也只能提供1个证书。
russau

非常清楚的解释。+1
丹·索洛维

7

SSLShopper答案对我不起作用,因为它没有主机头就离开了绑定,并且您在不断开与证书的连接的情况下无法删除该绑定。这是我用来使其工作的方法:

请注意,此答案假定您的证书已经生成,添加到证书存储中并添加到IIS。它还假设您不希望除SSL绑定之外的任何其他绑定到您的网站。

首先,我们需要收集一些信息。我们需要哈希,应用程序ID和主机名。

脚步

  1. 打开IIS,选择您的服务器,然后双击底部的“服务器证书”。注意“颁发给”地址。这是我们的主机名。保存这个。
  2. 选择你的网站
  3. 使用http协议将您的站点绑定到端口80
  4. 删除所有其他绑定
  5. 使用https协议将您的站点绑定到端口443
  6. 打开命令提示符

    netsh http show sslcert
    
  7. 保存证书哈希和应用程序ID

  8. 删除您网站上的https绑定
  9. 在命令提示符处:

    netsh http add sslcert ipport=0.0.0.0:443 certstorename=my certhash=<put Certificate Hash here> appid={<put Application ID here>}
    
    appcmd set site /site.name:"<put site name here>" /+bindings.[protocol='https',bindingInformation='*:443:<put host name here>']
    

注意:可以在c:\ windows \ system32 \ insetsrv中找到Appcmd.exe。您可能需要在该文件夹中才能运行此命令。

  1. 从您的网站中删除http绑定

谢谢!这最终帮助我使网站在HTTPS中正常工作。我纠正了其中一个命令中的拼写错误,但是我不得不添加“步骤”标题以超过最小长度要求。随意删除它-您的原始答案很容易理解。干杯!
potatopeelings

这对我来说具有6个SAN的证书(不是通配符证书),但略有不同,因为我有多个站点。我不得不执行步骤1至7一次。步骤8必须在每个站点上完成。每个站点必须执行一次步骤9的第一命令,并且必须执行一次步骤9的第二命令。
史蒂夫·凯

4

这里接受的答案令人困惑,我认为这个问题不正确。它不应该是公认的答案。

问题

您有一个通配符SSL(例如),*.ipsum.com并且已安装证书,但是在尝试添加HTTPS绑定时,由于文本框为灰色,因此您无法在IIS中为站点选择主机名。

解决方案

您的通配符SSL可以与任何子域一起使用,只需确保您使用即可启动证书的友好名称*。我更喜欢使用与通配符域相同的友好名称,例如,*.ipsum.com但是您可以使用星号将其命名为:*foo

我给证书输入了错误的友好名称,请帮助!

从Windows 8或Server 2012开始,您可以certlm.msc在开始菜单中键入以管理本地计算机的证书。在以前的Windows版本中,您需要做一些更复杂的事情:

  1. 运行mmc.exe从开始
  2. 转到File菜单,然后选择Add/Remove Snap-in...或点击(Ctrl-M)
  3. 高亮显示Certificates管理单元并单击,Add >然后在随后的对话框中选择Computer AccountLocal Computer然后单击Finish,然后单击OK以关闭管理单元窗口

在主窗口中,展开Certificates (Local Computer)Personal然后Certificates,你就可以用鼠标右键单击该证书,打Properties在那里你可以更新友好名称。

关闭并打开IIS管理器,然后可以设置主机名。


1
它成功了!
克雷克(Kreker)

1
@扎克真棒。太棒了 太棒了 尽管我实际上认为主机名字段为空并不重要,但这使我更加放心。请记住,我正在重新颁发证书。因此,我的主机名在空白之前已经在主机名字段中。我的通配符SSL似乎可以使用友好名称或。* mydomain.com类型名称。我认为在主机名字段为空之后,IIS会保留主机名的内部记录。我以为我应该提一下,以防人们吓坏了!
Charles Robertson

1
@扎克哦。该解决方案适用于Windows 2008R2等恐龙服务器……
Charles Robertson

@CharlesRobertson非常高兴这有所帮助,并感谢您添加该补充信息!
扎克

2

实际上,您可以通过gui添加主机标头,但这取决于证书的命名方式...如果我给通配符证书提供一个友好的名称* .xyz.com,然后选择该证书,那么我能够使用GUI。如果友好名称是xyzwildcard之类的,而我选择了该名称,那么hostheader字段将变灰...

怪异的


1

如果协议更改为https或添加SSL证书后,某些计算机将不允许您编辑主机名。IIS有时会很脾气暴躁。

该Windows命令将在端口“ 443”,主机名“ subdomain.domain.com”,站点名“ site name”上创建协议为“ https”的新绑定。更改这些值(用引号引起来)以满足您的要求。然后,如果使用端口443,则需要删除旧的绑定。

Run Windows Command Prompt as Administrator

C:>cd C:\Windows\System32\inetsrv

C:\ Windows \ System32 \ inetsrv>appcmd set site /site.name:"site_name" /+bindings.[protocol='https',bindingInformation='*:443:subdomain.domain.com']


0

仅当所选证书的油炸名称类似于主机名* .xyz.com时,才能添加主机名,并且您可以从mmc(Snap-in)将证书的友好名称重命名为* .xyz.com。


-1

我认为这篇知识库文章将对该问题有所启发。简而言之,当您使用SSL时,不支持HTTP 1.1主机头。

可能会完成您想要的工作的是使用SecureBindings元数据库密钥。例如cscript.exe adsutil.vbs设置为/ w3svc / websiteID / SecureBindings“ ip.ip.ip.ip:443:abc.123.mysite.com


不适用于IIS 7
davidcl

这很奇怪,因为它在我们执行时就起作用了……
Jim B 2010年

-1

MS为何不使用GUI,因为我拥有一个使用许可证文件(licx)的ASP.NET应用程序,所以它无法工作,因为它显示为IP地址而不是域名。他们需要停止对软件的每个新发行版的使用-IT人员不需要被Microsoft所托付!真是的


-2
  1. 我用* .testcompany.com创建了一个自签名证书,在“编辑绑定SSL证书”下拉菜单中选择了新创建的(以*开头),我启用了主机名文本框,并将主机名创建为'webapi.b2c .com”,

  2. 我在C:\ Windows \ System32 \ drivers \ etc 127.0.0.1 webapi.b2c.com中更新了主机文件

现在,我能够以“ https://webapp.b2c.com/ ” 浏览该站点

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.