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

AFA*_*Med 26 ssl sni subject-alternative-names

有人可以以简化的方式向我解释这些证书之间的区别吗?我读了一些文章,但听起来他们做同样的工作,即用一个证书加密多个域。

Håk*_*ist 43

SAN(主题备用名称)是X509 证书规范的一部分,其中证书有一个字段,其中包含对主题也有效的备用名称列表(除了单个通用名称 / CN)。此字段和通配符名称本质上是将一个证书用于多个名称的两种方式。

SNI(服务器名称指示)是一种TLS 协议扩展,类似于 HTTP 主机标头的 TLS 协议。当客户端发送它时,它允许服务器选择正确的证书来呈现给客户端,而没有在服务器端使用单独的 IP 地址的限制(很像 HTTP Host 标头如何大量用于纯 HTTP)。

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

另一方面,这在很大程度上取决于哪种路径实际上更可取。例如,如果您需要不同实体的证书,问题几乎肯定不是您真正想要的。

  • 值得注意的是,CN 已被弃用很长时间,如果名称在 CN 中但不在 SAN 中(或者如果证书没有 SAN 字段),很多客户会生你的气。 (2认同)

dro*_*kie 19

SAN代表Subject Alternative Name,它是一个 x509 证书属性,而SNI是 SSL/TLS 客户端可以支持的一个特性,因此是一个完全不同的实体。

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

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

  • SAN 和 SNI 都需要客户端支持。然而,由于 SAN 已经存在了很长时间,所以它得到了更广泛的支持。 (3认同)
  • 从技术上讲,我不相信 *SSL* 客户端可以支持 SNI(据我所知,这是一个从未出现在 SSL 中的 TLS 扩展)。 (2认同)

Chr*_*rin 6

这混合了证书过程的两个部分。

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

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