SAN 和 SNI SSL 证书有什么区别?

SAN 和 SNI SSL 证书有什么区别?

有人能用简单的方式向我解释一下这些证书之间的区别吗?我读过一些文章,但听起来它们做着同样的工作,即用一个证书加密多个域。

答案1

存储区域网络(主题备用名称)是X509 证书spec,其中证书有一个字段,其中包含对主体有效的备用名称列表(除了单个通用名称/CN)。此字段和通配符名称本质上是将一个证书用于多个名称的两种方式。

信噪比(服务器名称指示)是TLS 协议扩展这是 HTTP Host 标头的 TLS 协议等价物。当客户端发送此信息时,它允许服务器选择适当的证书来呈现给客户端,而不受在服务器端使用单独 IP 地址的限制(就像 HTTP Host 标头在纯 HTTP 中被大量使用一样)。

请注意,SNI 不是证书中反映的内容,它实际上实现了与问题要求的相反的效果;它简化了拥有多个证书的过程,而不是将一个证书用于许多事情。

另一方面,这在很大程度上取决于实际情况。例如,如果您需要不同实体的证书,那么问题所要求的几乎肯定不是您真正想要的。

答案2

存储区域网络代表主题备用名称,并且它是 x509 证书属性,并且信噪比是 SSL/TLS 客户端可以支持的功能,因此是一个完全不同的实体。

使用证书存储区域网络即使客户端不支持,您也可以在一个 IP 地址上托管多个启用 HTTPS 的网站信噪比。在这种情况下,您为所有网站持有一个证书,并且该证书必须包含所有网站名称(Apache 坐标中的ServerNames 或es,或Nginx 中的 s 或 es),​​因为它是ServerAliasserver_name存储区域网络。这是传统方法的一个子集,该方法确实扩展了“每个单独的 IP 地址上一个启用 HTTPS 的站点”。目前,只有大型 CDN 坚持使用存储区域网络

使用信噪比您还可以在一个 IP 上托管多个启用 HTTPS 的站点,每个站点都持有单独的 x509 证书,并且这些证书中都不会提及其他站点名称存储区域网络属性,但 TLS 客户端(即浏览器和控制台客户端,如wgetcurl)必须支持信噪比。这是一种现代方法,因为上一个操作系统不支持信噪比如果我没记错的话,当时的 Windows XP 是 IE 6.x。现在你可以看到存储区域网络如果您购买通配符证书 - 例如,这样的证书*.example.com将包含通用名称*.example.coma存储区域网络example.com

答案3

这将证书过程的两个部分混合在一起。

SAN 是主题备用名称。这是一种为多个域创建一个证书的方法。您只需将要为其颁发证书的其他域添加到证书中的 SAN 字段即可。然后浏览器也会接受这些域的有效性。

SNI 是服务器名称指示,是 TLS 的一部分。它允许您在单个 IP 上托管多个启用 TLS 的站点,因为所需的服务器名称会随 TLS 握手一起发送,并且服务器可以选择正确的证书作为答案。

答案4

这里有一个(可能)更易于理解的答案:

SNI 在客户端执行,并告诉 TLS 堆栈“我想与名为 [服务器 X] 的服务器通信”。服务器看到此 [服务器 X] 字符串并使用适当的证书进行回复。一个实际示例是单个服务器需要为多个域提供流量。如果客户端使用 IP(以避免 DNS 查找延迟)但证书 CN 未提及 IP,它也很有用。

SAN 是证书中的“也称为”列表。这样,服务器可以将单个证书用于多个名称。可以将多个域甚至 IP 列表添加到同一张证书中。

如您所见,事情重叠。选择其中一个还是两个取决于一个人可以控制什么。一些客户端可能无法识别 SAN 中的名称,解决这个问题的唯一方法是通过基于 SNI 提供适当的证书。有些情况下,服务器为单个证书提供 API,或者客户端不发送 SNI。对于这些情况,SAN 是唯一的出路。

我的公司同时使用这两种方式。它们提供了灵活性,并且使向后和向前兼容更加容易。

相关内容