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


21

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


11
好吧,首先,没有“ SNI” SSL证书之类的东西。
迈克尔·汉普顿

Answers:


36

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

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

请注意,SNI并非反映在证书中,它实际上实现了与问题要求相反的功能;它简化了拥有多个证书的过程,而在很多事情上都不使用一个证书。

另一方面,这实际上取决于情况,即哪种路径实际上是更可取的。举例来说,如果您需要不同实体的证书,那么问题的要求几乎肯定不是您真正想要的。


2
值得注意的是,CN已被弃用很长时间了,如果CN中有名称但SAN中没有名称(或者证书没有SAN字段),那么很多客户就会对您发火。
coderanger

1
@coderanger如果存在SAN字段,则大多数客户端将忽略CN字段。如果没有SAN字段,则CN字段适用于大多数客户端(如果他们生气了,则不会显示)。
kubanczyk

1
他们正在默默地评价你。
womble

SNI是否类似于虚拟主机,在虚拟主机中,具有一个IP地址的服务器拥有HTTP配置中定义的多个主机?(某种多路复用:将一个IP用于多个证书,而不是使用具有不同IP的每个证书,如今IPv4是一种稀缺资源)?
Fernando Gabrieli

1
@FernandoGabrieli是的,它在TLS级别启用了相同的基于名称的设置。
哈坎林克韦斯特

14

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

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

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


1
从技术上讲,我不认为SSL客户端可以支持SNI(据我所知,这是一个从未在SSL中出现过的TLS扩展)。
哈坎·林奎斯特

3
SAN和SNI都需要客户端支持。但是,由于SAN已经存在了很长时间,因此得到了更广泛的支持。
卡巴斯德(Kasperd)

4

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

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

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


0

这是(可能)更易理解的答案:

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

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

如您所见,事情重叠了。在一个或两个之间进行选择取决于一个人可以控制的地方。某些客户端可能无法识别SAN中的名称,而唯一的寻址方法是通过提供基于SNI的适当证书。在某些情况下,服务器为单个证书提供API,或者客户端不发送SNI。对于这些情况,SAN是唯一的出路。

我公司同时利用了两者。它们提供了灵活性,并使向后和向前的兼容性更容易。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.