我正在创建一个将运行于 的 websocket 服务器ws.mysite.example
。我希望 web 套接字服务器既能进行 SSL 加密,又能domain.example
进行 SSL 加密。我是否需要为创建的每个子域购买新证书?我是否需要为创建的每个子域提供专用 IP 地址?我可能会有多个子域。
我正在使用在 Ubuntu 上运行的 NGINX 和 Gunicorn。
答案1
我将分两步回答这个问题...
每个子域名都需要 SSL 证书吗?
是也不是,视情况而定。您的标准 SSL 证书将用于单个域,例如www.domain.example
。除了标准单域证书外,您还可以获得不同类型的证书:通配符和多域证书。
A通配符证书将针对类似的内容发出
*.domain.example
,并且客户端将把它视为对以 结尾的任何域名有效domain.example
,例如www.domain.example
或ws.domain.example
。A多域名证书对预定义的域名列表有效。它通过使用证书的“主题备用名称”字段来实现这一点。例如,您可以告诉 CA 您想要一个针对
domain.example
和 的多域证书ws.mysite.example
。这将允许它用于两个域名。
如果这两个选项都不适合您,那么您需要拥有两个不同的 SSL 证书。
每个子域名都需要一个独立 IP 吗?
再次强调,答案是肯定和否定...这完全取决于您的 Web/应用程序服务器。我使用 Windows,因此我将使用 IIS 示例来回答。
如果您运行的是 IIS7 或更早版本,则必须将 SSL 证书绑定到 IP,并且不能将多个证书分配给单个 IP。如果您为每个子域使用专用 SSL 证书,则这会导致每个子域都需要不同的 IP。如果您使用多域证书或通配符证书,那么您可以使用单个 IP,因为您一开始只有一个 SSL 证书。
如果您运行的是 IIS8 或更高版本,则同样适用。但是,IIS8+ 包括对服务器名称指示 (SNI) 的支持。SNI 允许您将 SSL 证书绑定到主机名,而不是 IP。因此,用于发出请求的主机名(服务器名称)用于指示 IIS 应该使用哪个 SSL 证书来执行请求。
如果您使用单个 IP,那么您可以配置网站来响应对特定主机名的请求。
我知道 Apache 和 Tomcat 也支持 SNI,但我对它们不够熟悉,不知道哪些版本支持它。
结论
您的选择将取决于您的应用程序/Web 服务器以及您能够获得的 SSL 证书类型。
答案2
您可以为每个子域名获取一个证书,也可以获取多个子域名证书或通配符证书(为了*.yoursite.example
)。
不过,它们的成本通常比常规证书高出不少,而且由于您共享单个证书,因此从安全角度来看,它们通常不是最佳选择,除非您托管某种anything.mydomain.example
类型的应用程序,而它们是唯一可行的选择。
如果你有支持 SNI 的 Web 服务器。话虽如此,SNI 仅在现代浏览器中受支持(IE6 及以下版本不支持它)。Nginx 和 Apache 的最新版本透明地支持 SNI(只需添加启用 SSL 的虚拟主机)。
答案3
答案4
您要么需要为每个子域名获取单独的证书,要么可以购买通配符证书(*.domain.example
) - 价格更昂贵,但如果您托管大量子域名则更有意义。
至于 IP,这取决于您如何设置服务器。您可以使用主机名规则从同一 IP 为多个站点提供服务,也可以为每个站点使用唯一的 IP。这两种方法各有利弊。