AFA Med Asked: 2016-10-10 01:46:09 +0800 CST2016-10-10 01:46:09 +0800 CST 2016-10-10 01:46:09 +0800 CST SAN 和 SNI SSL 证书有什么区别? 772 有人可以以简化的方式向我解释这些证书之间的区别吗?我读了一些文章,但听起来他们做的是同样的工作,即用一个证书加密许多域。 ssl sni subject-alternative-names 4 个回答 Voted Best Answer Håkan Lindqvist 2016-10-10T03:53:27+08:002016-10-10T03:53:27+08:00 SAN(主题备用名称)是X509 证书规范的一部分,其中证书有一个字段,其中包含对主题也有效的备用名称列表(除了单个通用名称/CN)。此字段和通配符名称本质上是一个证书用于多个名称的两种方式。 SNI(服务器名称指示)是一种TLS 协议扩展,它是一种等效于 HTTP 主机头的 TLS 协议。当客户端发送此信息时,它允许服务器选择正确的证书呈现给客户端,而不受在服务器端使用单独 IP 地址的限制(很像 HTTP Host 标头如何大量用于纯 HTTP)。 请注意,SNI 不是证书中反映的东西,它实际上实现了与问题要求相反的东西;它简化了拥有许多证书,而不是使用一个证书做很多事情。 另一方面,这在很大程度上取决于实际情况更可取的路径。例如,如果您需要不同实体的证书,几乎可以肯定问题所要求的不是您真正想要的。 drookie 2016-10-10T02:55:35+08:002016-10-10T02:55:35+08:00 SAN代表Subject Alternative Name,它是一个 x509 证书属性,而SNI是 SSL/TLS 客户端可以支持的功能,因此是一个完全不同的实体。 使用带有SAN的证书,即使客户端不支持SNI ,您也可以在一个 IP 地址上托管多个启用 HTTPS 的站点。在这种情况下,您为所有站点持有一个证书,并且该证书必须包含所有站点名称( Apache 坐标或Nginx中的ServerNames 或ServerAliases ),因为它是SAN。这是传统方法的一个子集,它确实扩展了“每个单独的 IP 地址上的一个启用 HTTPS 的站点”。目前,只有大型 CDN 坚持使用SAN。server_name 使用SNI,您还可以在一个 IP 上托管多个启用 HTTPS 的站点,您为每个站点持有单独的 x509 证书,并且这些站点都没有在其SAN属性中提及其他站点名称,而是 TLS 客户端(即浏览器和控制台客户端,例如wget或curl)必须支持SNI。这是一种现代方法,因为如果我没记错的话,最后一个不支持SNI开箱即用的操作系统是带有 IE 6.x 的 Windows XP。现在,如果您购买通配符证书,您可以看到SAN属性- 例如,此类证书将包含.*.example.com*.example.comexample.com Christopher Perrin 2016-10-10T02:15:52+08:002016-10-10T02:15:52+08:00 这混合了证书过程的两个部分。 SAN 是主题备用名称。这是一种为多个域创建一个证书的方法。您只需将需要证书的其他域添加到证书中的 SAN 字段。然后浏览器也将接受这些域的有效性。 SNI 是服务器名称指示,是 SSL 的一部分。它允许您在单个 IP 上托管多个 SSL 站点,因为所需的服务器名称与 SSL 握手一起发送,并且服务器可以选择正确的证书作为答案。 Igor Gatis 2017-08-02T07:21:05+08:002017-08-02T07:21:05+08:00 这是一个(可能)更具人类可读性的答案: SNI 在客户端执行并告诉 TLS 堆栈“我想与一个名为 [Server X] 的服务器通信”。服务器看到此 [Server X] 字符串并使用适当的证书进行回复。一个实际示例是当单个服务器需要为多个域提供流量时。如果客户端使用 IP(以避免 DNS 查找延迟)但证书 CN 未提及 IP,这也很有用。 SAN 是证书中“也称为”的列表。这样,服务器可以对多个名称使用单个证书。可以将多个域添加到同一个证书,甚至是 IP 列表。 正如你所看到的,事情是重叠的。在其中一个或两个之间进行选择取决于一个人可以控制的位置。某些客户端可能无法识别 SAN 中的名称,解决此问题的唯一方法是提供基于 SNI 的适当证书。存在服务器为单个证书提供 API 或客户端不发送 SNI 的场景。对于这些情况,SAN 是唯一的出路。 我的公司两者都用。它们提供了灵活性并使向后和向前兼容更容易。
SAN(主题备用名称)是X509 证书规范的一部分,其中证书有一个字段,其中包含对主题也有效的备用名称列表(除了单个通用名称/CN)。此字段和通配符名称本质上是一个证书用于多个名称的两种方式。
SNI(服务器名称指示)是一种TLS 协议扩展,它是一种等效于 HTTP 主机头的 TLS 协议。当客户端发送此信息时,它允许服务器选择正确的证书呈现给客户端,而不受在服务器端使用单独 IP 地址的限制(很像 HTTP Host 标头如何大量用于纯 HTTP)。
请注意,SNI 不是证书中反映的东西,它实际上实现了与问题要求相反的东西;它简化了拥有许多证书,而不是使用一个证书做很多事情。
另一方面,这在很大程度上取决于实际情况更可取的路径。例如,如果您需要不同实体的证书,几乎可以肯定问题所要求的不是您真正想要的。
SAN代表Subject Alternative Name,它是一个 x509 证书属性,而SNI是 SSL/TLS 客户端可以支持的功能,因此是一个完全不同的实体。
使用带有SAN的证书,即使客户端不支持SNI ,您也可以在一个 IP 地址上托管多个启用 HTTPS 的站点。在这种情况下,您为所有站点持有一个证书,并且该证书必须包含所有站点名称( Apache 坐标或Nginx中的
ServerName
s 或ServerAlias
es ),因为它是SAN。这是传统方法的一个子集,它确实扩展了“每个单独的 IP 地址上的一个启用 HTTPS 的站点”。目前,只有大型 CDN 坚持使用SAN。server_name
使用SNI,您还可以在一个 IP 上托管多个启用 HTTPS 的站点,您为每个站点持有单独的 x509 证书,并且这些站点都没有在其SAN属性中提及其他站点名称,而是 TLS 客户端(即浏览器和控制台客户端,例如
wget
或curl
)必须支持SNI。这是一种现代方法,因为如果我没记错的话,最后一个不支持SNI开箱即用的操作系统是带有 IE 6.x 的 Windows XP。现在,如果您购买通配符证书,您可以看到SAN属性- 例如,此类证书将包含.*.example.com
*.example.com
example.com
这混合了证书过程的两个部分。
SAN 是主题备用名称。这是一种为多个域创建一个证书的方法。您只需将需要证书的其他域添加到证书中的 SAN 字段。然后浏览器也将接受这些域的有效性。
SNI 是服务器名称指示,是 SSL 的一部分。它允许您在单个 IP 上托管多个 SSL 站点,因为所需的服务器名称与 SSL 握手一起发送,并且服务器可以选择正确的证书作为答案。
这是一个(可能)更具人类可读性的答案:
SNI 在客户端执行并告诉 TLS 堆栈“我想与一个名为 [Server X] 的服务器通信”。服务器看到此 [Server X] 字符串并使用适当的证书进行回复。一个实际示例是当单个服务器需要为多个域提供流量时。如果客户端使用 IP(以避免 DNS 查找延迟)但证书 CN 未提及 IP,这也很有用。
SAN 是证书中“也称为”的列表。这样,服务器可以对多个名称使用单个证书。可以将多个域添加到同一个证书,甚至是 IP 列表。
正如你所看到的,事情是重叠的。在其中一个或两个之间进行选择取决于一个人可以控制的位置。某些客户端可能无法识别 SAN 中的名称,解决此问题的唯一方法是提供基于 SNI 的适当证书。存在服务器为单个证书提供 API 或客户端不发送 SNI 的场景。对于这些情况,SAN 是唯一的出路。
我的公司两者都用。它们提供了灵活性并使向后和向前兼容更容易。