我们想要在 IIS 服务器上有两个 SSL 站点。我使用 IIS 生成了一个自签名 SSL 证书 https://Django.mycompanyname.com:443
然而我们也需要https://site2.Django.mycompanyname.com:443在同一台服务器上。
如果不购买通配符 SSL 证书,可以实现这一点吗?
答案1
从技术上来说,这是可能的——它被称为服务器名称指示。
支持此功能的第一个 IIS 版本是 IIS 8.0(请参阅这里)
对于您来说,您需要将服务器至少更新到 Server 2012 或使用能够提供此功能的反向代理。
我建议使用 nginx 作为反向代理 - 它提供了额外的功能,例如 HTTP2 支持和所服务内容的整体性能改进(nginx 在传输方面也做了一些相当不错的优化)
简单解释一下这里实际发生的情况:
使用 SNI 时,加密连接的协商方式会有所修改,即客户端在连接开始时发送请求的主机名 - 因此较旧的客户端不支持此方式。收到请求的主机名后,服务器可以决定将哪个证书交给客户端(正确设置证书时,证书与请求的主机名匹配)。
如果服务器不提供此机制,则每个侦听器只有一个证书可用,并且此证书将分发给任何连接的客户端。因此,单个端点(由 IP:Port 定义)只能使用一个证书进行响应(和/或绑定到一个主机名)。
IIS7 不提供 SNI 功能。
这导致需要包含所有请求/服务的主机名的证书(由于主机数量/客户不同,这可能无法实现)或每个提供的 SSL/TLS 端点的唯一绑定(IP:端口)。