考虑使用IIS7的Win 2008 SP2计算机。 任务是将证书和主机名应用于此机器上的唯一站点。 该网站的主机标题需要是abc.123.example.com
第一步是将.pfx安装到个人商店,这是成功的。
IIS7发现证书可用,但不允许input主机名。 主机名称文本框总是禁用/灰色,即使在select我的证书之前。 我甚至删除了默认的端口80绑定。
问:我怎样才能为这个网站设置一个主机名? 这个证书是通配证书吗? 我知道SSL请求进入Web服务器,并且数据包中的主机头被encryption。 为什么IIS6允许指定主机头,但是IIS7不是?
更新:证书不是问题的一部分。 我在机器上创build了一个新的站点,当selecthttps绑定时,主机名文本框被禁用。
你不能从UI执行,你必须从命令行执行。 这是一个很好的演习过程:
http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html
它在GUI中工作…
只要确保您所安装的证书的“友好名称”与您为证书所创build的多域名相同即可。
即。 * .companydomain.com
如果您为* .companydoman.com证书input了“Nice friendly name”,那么在将证书安装到IIS中时,会将主机名标题框变灰。
如果您使用* .companyname.com作为友好名称,那么您是黄金。
繁荣。
简而言之,每个IP只能绑定一个证书,所以无论主机名是否指向该IP地址,证书绑定都将适用。 能够指定主机名将意味着您可以在同一个IP地址和端口上拥有多个主机名和证书组合(就像使用非SSL条目一样),但事实并非如此,所以该字段不可用。
更完整的解释是,SSLencryption您的stream量,部分stream量是由浏览器发送到服务器的HTTP头。 其中一个标题就是IIS用来确定要加载哪个站点的“主机”标题。 由于在发送请求标头之前需要加载证书来build立安全连接,因此IIS必须仅根据IP地址和端口号来select证书,并将“主机”标头作为确定因素哪个网站加载,所以他们不让你input一个。
这里有一篇文章更详细地概述了SSL连接的内部工作 。
SSLShopper答案对我来说不起作用,因为它没有主机头文件而使绑定不起作用,并且不能拆除绑定而不破坏与证书的连接。 这是我用来使它工作的方法:
请注意,这个答案假设您的证书已经被生成,被添加到证书存储并被添加到IIS中。 它还假定除了SSL之外,您不需要任何其他绑定到您的网站。
首先,我们需要收集一些信息。 我们需要散列,应用程序ID和主机名。
脚步
打开命令提示符
netsh http show sslcert
保存证书哈希和应用程序ID
在命令提示符下:
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>']
注意:Appcmd.exe可以在c:\ windows \ system32 \ insetsrv中find。 您可能需要在该文件夹中才能使用此命令。
其实,你可以通过gui添加一个主机头,但是这取决于证书是如何命名的……如果我给* .xyz.com一个友好的名字给我的通配符证书,并select该证书,那么我能够使用gui。 如果友好的名字是像xyzwildcard的东西,我select,然后它灰色hostheader字段…
奇怪怪异
如果协议更改为https或添加SSL证书后,有些机器不会让您编辑主机名。 IIS有时会脾气暴躁。
此Windows命令将在端口“443”,主机名“subdomain.domain.com”,站点名称“站点名称”上创build与协议“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']
这里接受的答案是混乱的,我不认为这个问题是正确的。 这不应该是被接受的答案。
问题
您有一个通配符SSL,例如*.ipsum.com
并且安装了证书,但是当您尝试添加HTTPS绑定时,因为文本框变灰,您无法在IIS中为该站点select主机名。
解决scheme
您的通配符SSL可以与任何子域一起使用,您只需确保使用*
开始证书的友好名称即可。 我更喜欢使用与通配符域相同的友好名称,例如*.ipsum.com
但您可以将其称为任何与asterix存在的东西: *foo
我给了我的证书错误的友好名字,帮助!
自Windows 8或Server 2012以来,您可以在开始菜单中键入certlm.msc
来pipe理本地计算机的证书。 在之前的Windows版本中,您需要做一些稍微复杂的操作:
mmc.exe
File
菜单并selectAdd/Remove Snap-in...
或点击(Ctrl-M)
Certificates
pipe理单元,然后点击Add >
然后selectComputer Account
然后在随后的对话框中selectLocal Computer
,然后单击Finish
然后OK
closurespipe理单元窗口 在主窗口中,展开Certificates (Local Computer)
然后展开Personal
然后Certificates
,您将能够右键单击证书,点击Properties
,您可以更新友好名称。
closures并打开IISpipe理器 ,然后您可以设置您的主机名称。
我认为这个知识库文章将揭示这个问题。 简而言之,当您使用SSL时,不支持HTTP 1.1主机头。
什么可能会完成你想要的是使用SecureBindings元数据库密钥。 例如:cscript.exe adsutil.vbs set / w3svc / websiteID / SecureBindings“ip.ip.ip.ip:443:abc.123.mysite.com
为什么MS需要这样的GUI是超出我的,因为如果你有一个使用许可证文件(licx)的ASP.NET应用程序,你的网站将无法工作,因为它显示为一个IP地址,而不是一个域名。 他们需要停止他们的软件的每一个新版本的假设 – IT人员不需要由微软保姆! 天啊!
我使用* .testcompany.com创build了一个自签名证书,我select了编辑绑定SSL证书下拉菜单中新创build的(以*开头),我启用了主机名文本框,创build了主机名为“webapi.b2c .COM”,
我更新了C:\ Windows \ System32 \ drivers \ etc 127.0.0.1 webapi.b2c.com中的主机文件
现在我可以浏览网站“ https://webapp.b2c.com/ ”