简短说明
对于Windows Server 2012:如果客户端不支持SNI,有没有办法定义默认证书?
详细说明
我们目前正在配置Windows Server 2012,由于技术原因,它只有一个IP。该服务器用于两个任务:
因此,为同一IP地址和端口定义了两个证书。当对端口443进行调用时,几乎每个客户端都提交SNI参数“server_name”。然后,服务器使用此参数为连接选择正确的证书。
BUT: 带有Internet Explorer的Windows XP不支持SNI,并且缺少参数“server_name”。因此服务器必须猜测,返回哪个证书。在我们的示例中,它默认为vpn-certificate,浏览器显示证书错误(因为证书的主机名“vpn.example.com”与URL“www.example.com”中的主机名不匹配)。
有没有办法建议服务器使用www-certificate作为默认值?
在我们的案例中,这将是一个完美的解决方案:
可以这样做吗?
答案 0 :(得分:1)
我知道你已经自己回答了这个问题,但令我感到困惑的是,没有简单的方法可以做到这一点。 我不确定你是否有时间尝试它,但我认为这种方法即使在重启期间也会保存设置。
在您的情况下,如果编辑vpn.example.com的https 443绑定并勾选“需要服务器名称指示”框并输入课程的主机名,然后单击“确定”。 然后在另一个网站www.example.com上做同样的事情,但删除"要求服务器名称指示"。
当我运行netsh http show sslcert
时,它显示了我已经交换的两个证书,一个在ip:port上,另一个在主机名:port
IP:port : 0.0.0.0:443
Certificate Hash : 41f099397ad4437f7af7bf1c3157a18bd2576ebc
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : WebHosting
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
Hostname:port : secure.localhost:443
Certificate Hash : 106073025a888e17e94a7843de844d270714e806
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : WebHosting
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
之后
IP:port : 0.0.0.0:443
Certificate Hash : 106073025a888e17e94a7843de844d270714e806
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : WebHosting
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
Hostname:port : localhost:443
Certificate Hash : 41f099397ad4437f7af7bf1c3157a18bd2576ebc
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : WebHosting
Verify Client Certificate Revocation : Enabled
Verify Revocation Using Cached Client Certificate Only : Disabled
Usage Check : Enabled
Revocation Freshness Time : 0
URL Retrieval Timeout : 0
Ctl Identifier : (null)
Ctl Store Name : (null)
DS Mapper Usage : Disabled
Negotiate Client Certificate : Disabled
希望这会为你节省一些时间和其他任何事情!
答案 1 :(得分:0)
我做了更多的研究。底线:它可以完成,但只能在命令行上完成,可能不是永久性的。 Netsh可以显示http绑定。
netsh http show sslcert
在那里你可以看到IIS注册了一个SNI-Binding:www.example.com:443
但RAS-Service使用证书vpn.example.com注册完整端口443:0.0.0.0:443。
如果客户端不支持SNI,后者也是默认证书。 现在我使用netsh将RAS-Binding移动到vpn.example.com:443并在www.example.com上为0.0.0.0:443创建一个新绑定。
现在服务器的行为完全符合我的要求。我甚至使用Wireshark来确保我的RAS客户端确实支持SNI。
但是这个设置可能不是永久性的。只要IIS或RAS-Service重置设置,它们就会丢失。
当然,您可以使用某种服务每隔几秒检查一次这些设置。但我没有发现任何开箱即用的东西,也不想实现它。因此,我将等待Microsoft通过gui为RAS启用SNI,并在此之前使用单个证书。