AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 807959
Accepted
AFA Med
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 4 个回答
  • 30289 Views

4 个回答

  • Voted
  1. 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 不是证书中反映的东西,它实际上实现了与问题要求相反的东西;它简化了拥有许多证书,而不是使用一个证书做很多事情。

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

    • 45
  2. 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

    • 21
  3. Christopher Perrin
    2016-10-10T02:15:52+08:002016-10-10T02:15:52+08:00

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

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

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

    • 5
  4. 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 是唯一的出路。

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

    • 0

相关问题

  • 如何使用 Tomcat 5.5 更新 SSL 证书

  • 为 IIS6 自行生成 SSL 证书?

  • plesk 上的域和子域 ssl 访问

  • 如何设置 SSL 邮件服务器?

  • 如何通过 SVN 命令行接受 SSL 证书?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve