Yuuki

Yuuki's Blog

Hacker. Code Enthusiast.
github
bilibili
twitter

深入理解 HTTPS 证书

TL;DR#

HTTPS 证书是一种数字证书,用于保护网站数据的安全传输,主要通过身份验证和数据加密实现。证书类型包括 DV SSL、OV SSL 和 EV SSL,各有其应用场景和特性。浏览器通过一系列步骤检查证书的有效性,并使用证书中的公钥进行加密通信。此外,我们还可以通过命令行工具手动获取和检查网站的 HTTPS 证书,进而检查网站的通用名称(CN)和主题备用名称(SAN)。

什么是 HTTPS 证书?#

HTTPS 证书,也称为 SSL 证书或 CA 证书,是一种数字证书,它的主要作用是保护网站数据的安全传输。这种证书能够确保用户与网站之间的通信过程中,数据不会第三方截取或篡改。同时,浏览器也能通过检查证书来确认用户访问的网站是否真实可靠。

HTTPS 证书有什么作用?#

HTTPS 证书的作用主要体现在以下两个方面:

  1. 身份验证: HTTPS 证书中包含了网站的身份信息。当用户访问一个使用了 HTTPS 证书的网站时,浏览器会检查证书的有效性。如果证书有效,浏览器会显示该页面是安全的。如果证书无效或者被篡改,浏览器则会向用户发出警告。
  2. 数据加密: HTTPS 证书可以在用户的浏览器和服务器之间建立一个加密的通信通道,确保数据在传输过程中不会被第三方窃取或篡改,从而有效的保护用户的隐私数据。

HTTPS 证书有哪些类型?#

HTTPS 的证书主要有以下几种类型:DV SSL 证书 (域名验证型)、OV SSL 证书 (组织验证型),以及 EV SSL 证书 (拓展验证型)。

阿里云中对不同证书类型的描述如下:

OV (Organization Validation) 证书

  • OV 证书是企业 SSL 证书的首选,通过企业认证确保代表企业 SSL 证书的真实性,拒绝网站风险。
  • OV 证书支持特殊域名的签发,例如 gov、edu、.gov、.org、.jp(国家缩写)等
  • OV 证书支持证书合并,多张证书(域名)合并签发

DV (Domain Validation) 证书

  • DV 证书一般用于个人网站 / 测试使用,DV 证书签发速度快、无需人工审核,确保域名验证信息正确的情况下 1-15 分钟就能签发
  • DV 证书无法为特殊域名 / 公网 IP 签发证书(例如:edu、.gov、.org、.jp(国家缩写)等后缀的域名)
  • DV 证书无法将多个域名合并到一张证书内

EV (Extended Validation) 证书

  • EV 证书是最高级别的密码安全等级、可信等级和权威等级,确保网站数据传输安全不泄漏
  • 优势:杜绝非授权代申请证书情况

浏览器如何检查 HTTPS 证书?#

当我们访问一个网站时,浏览器检查网站证书的流程通常包括以下几个步骤:

  1. 请求证书:当你访问一个 HTTPS 网站时,你的浏览器会向网站请求它的 HTTPS 证书。
  2. 检查颁发者:浏览器会检查证书的颁发者是否为可信任的证书办法机构。如果不是,浏览器会显示警告。
  3. 验证证书:浏览器会验证证书的有效性。包括检查证书是否已经过期,以及证书的域名是否与你正在访问的网站的域名匹配。
  4. 使用公钥:如果证书有效,浏览器会使用证书中的公钥来加密你发送给网站的信息。同时网站会使用对应的私钥来解读你发送的信息。

证书的域名是什么?#

证书的域名,也被称为 公共名称 (Common Name)主题备用名称 (Subject Alternative Name),是 HTTPS 证书中的一个重要部分。它表示了这个证书是为哪个网站颁发的。

公共名称 (Common Name, CN) 是证书的主要标识符,通常是证书所保护的主机名,例如 www.example.com。在早期的 SSL 证书中,公共名称是唯一可以用来标识证书所保护的域名的字段。并且公共名称的值只能存在一个。

然而,随着互联网的发展,一个证书可能需要保护多个域名,这就引入了 主题备用名称 (Subject Alternative Name, SAN)。SAN 是一个扩展字段,可以包含一个或多个域名或子域名。例如,一个证书的 SAN 可以包含 example.comwww.example.com 以及 mail.example.com,这样一个证书就可以保护这三个域名。

有哪些类型的证书域名?#

HTTPS 证书的域名主要有以下几种类型:

  1. 单域名 SSL 证书:这种证书只能保护一个具体的域名,无法保护其他的域名。例如,如果证书的 CN 或 SAN 中包含 example.com,那么这个证书只能保护 example.com 网站。
  2. 多域名 SSL 证书:这种证书可以保护多个域名,这些域名需要在证书的主题备用名称中列出 (ASN)。例如,如果证书主题备用名称中包含 www.example.comexample.com 以及 sub.example.com,那么这个证书将保护这三个网站。
  3. 通配符 SSL 证书:这种证书可以保护一个主域名及其所有的以一级子域名,但不能保护二级子域名或更深层次的子域名。例如,如果在 CN 或 SAN 中包含 *.example.com,那么这个证书可以保护 example.com 及其所有的一级子域名的网站。

手动检查网站的 HTTPS 证书#

在基于 Unix 的操作系统中,我们可以使用下面的命令来获取目标网站的 SSL 证书:

website=example.com
echo | openssl s_client -servername $website -connect $website:443 2>/dev/null | openssl x509 -noout -text

在这个命令中:

  • openssl s_client -servername $website -connect $website:443 部分会启动一个 SSL/TLS 客户端并连接到指定的网站的 443 端口(HTTPS 默认端口)。-servername 参数用于指定 SNI(Server Name Indication),这是一个 TLS 扩展,用于在握手阶段发送服务器名称。
  • 2>/dev/null 这部分命令会把错误信息重定向到 /dev/null,也就是说,错误信息不会被显示出来。
  • openssl x509 -noout -text 这部分命令会解析从 s_client 命令获取的证书信息。-noout 参数表示不输出编码后的证书,-text 参数表示以文本形式显示证书的详细信息。

如果目标网站使用了 HTTPS 证书,这个命令将会返回证书的详细信息,包括证书的版本,序列号,签名算法,颁发者,有效期,主题,公钥信息,扩展字段等。

检查证书通用名称和主题备用名称#

在上述命令的输出结果中查找 Subject: 行,你可以在这里找到证书的通用名称。

20240607_180859

查找 X509v3 Subject Alternative Name: 行,你可以在这里找到证书的主题备用名称。

20240607_181031

获取证书唯一标识#

当我们需要获取证书的唯一标识时,通常我们会使用证书的指纹(Fingerprint)。证书的指纹是通过对证书的 DER 编码(一种二进制格式)应用特定的哈希算法(如 SHA-256)得到的。你可以通过以下命令查看证书的 SHA-256 指纹:

website=example.com
echo | openssl s_client -servername $website -connect $website:443 2>/dev/null | openssl x509 -noout -fingerprint -sha256

这个命令会返回类似于 SHA256 Fingerprint=XX:XX:XX:... 的输出,其中的 XX:XX:XX:... 就是证书的 SHA-256 指纹,可以作为证书的唯一标识。每个证书的指纹都是唯一的,即使证书的其他信息(如主题或颁发者)相同,只要证书本身不同,其指纹就会不同。因此,指纹可以用来唯一地标识一个证书。如果两个证书的指纹相同,那么这两个证书就是完全相同的。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。