# 网络艺术:SSL/TLS证书

2024-02-15
:: tags: #Network

前言 什么是SSL/TLS证书？它有什么作用？如何部署？

## 什么是SSL/TLS证书

SSL 的全称是 `Secure Sockets Layer`（安全套接字层），而 TLS 的全称是 `Transport Layer Security`（传输层安全协议）。最初由 Netscape 开发的 SSL 协议用于保护网络通信，但由于其存在的安全漏洞，后来被更新、更安全的 TLS 协议所取代。

如今，当我们谈论“SSL 证书”时，实际上指的是支持 TLS 协议的数字证书，`两者在功能上没有本质区别，只是在命名上沿用了历史传统`。该证书是由受信任的数字证书颁发机构 CA，在验证服务器身份后颁发，且具有服务器身份验证和数据传输加密功能。简单来说就是`HTTP+SSL/TLS证书=HTTPS.`

## SSL证书是如何工作的

- 当我们点击一个超链接（HTTP），浏览器帮我们跳转到新标签页；
- 通过DNS（Domain name system）查询找到该域名（地址栏中的如www.xxx.com之类的字符）对应的IP地址，可能是某个CDN的地址；
- 服务器上已经配置好certificate.crt（公钥）和private.key（私钥）；
- CDN随后与真正的服务器建立连接，服务器上的反向代理（可能是nginx或者caddy）检测连接，并用配置好的证书将连接升级为HTTPS；
- HTTPS握手并将内容显示在浏览器上。

## SSL/TLS证书的握手过程

- 客户端发送"ClientHello"消息，包含支持的加密算法和TLS版本；
- 服务器回应"ServerHello"消息，选择加密算法并发送SSL/TLS证书；
- 客户端验证证书的有效性(通过内置的CA根证书)；
- 客户端使用服务器公钥加密一个"预主密钥"并发送给服务器；
- 双方根据预主密钥生成会话密钥；
- 使用会话密钥进行加密通信；
- 加密通信：握手完成后，所有数据传输都使用协商好的对称密钥加密。

> 使用公钥加密的数据只能用对应的私钥解密，使用私钥加密(签名)的数据可以用对应的公钥验证。

> 客户端和服务器都支持非常多的密码套件，比如“ECDHE-RSA-AES256-GCM-SHA384”。格式是“密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法”，这个密码套件的意思就是：“握手时使用 ECDHE 算法进行密钥交换，用 RSA 签名和身份认证，握手后的通信使用 AES 对称算法，密钥长度 256 位，分组模式是 GCM，摘要算法 SHA384 用于消息认证和产生随机数。”

## CA证书

可以看到，验证证书的有效性需要通过CA证书，由CA机构（如DigiCert Let's Encrypt）等颁布，CA证书的层级结构如下：

- 根CA证书：最高级别的证书，自签名，是整个信任链的起点.
- 中间CA证书：由根CA签发，可以签发终端实体证书或其他中间CA证书.
- 终端实体证书：由根CA或中间CA签发给网站、服务器等实体使用.

操作系统和浏览器`内置了受信任的根CA证书列表`,当验证网站证书时，系统会沿着证书链向上追溯至根CA;如果能找到一个受信任的根CA，且证书链上所有签名有效，则验证通过.这就是保护我们上网安全的`信任链`的基础。

当我们访问网页时，往往会看到左上角的`锁`图标，里面是`Google Trust Services`或者`DigiCert Inc`等等，代表证书的颁发来源。如果锁提示不安全，可能是证书过期或者找不到CA证书，即有可能是自签名证书。`什么是自签名证书？`

## 证书颁发

我们先来看证书颁发的流程。

- 证书申请：网站所有者向证书颁发机构(CA)申请SSL/TLS证书，提供域名和组织信息。
- 身份验证：CA验证申请者的身份和域名所有权。验证方式包括域名验证(DV)、组织验证(OV)或扩展验证(EV)。
- 证书签发：验证通过后，CA使用其私钥为申请者签发数字证书，包含公钥、域名信息、颁发者信息和有效期等。
- 安装部署：网站管理员将证书安装到Web服务器上。

可以看到过程有点麻烦，个人建站的话往往使用自签名证书，即`ssh-keygen`生成的公钥和私钥，由于没有CA所以会显示不安全。

## 申请证书

- sslforfree由 ZeroSSL 支持颁发的免费SSL证书.

- 通过AMH提供的自助在线申请服务申请SSL通配符证书.需要注册AMH账号.

- letsencrypt，支持申请多渠道SSL证书.

- 借助Punchsalad提供的在线服务申请SSL证书，无需登录，仅需邮箱即可完成SSL通配符证书申请和签发.

## DV/OV/EV SSL证书的区别

以下是三种主要SSL证书验证类型的对比：

特性 | 域名型SSL (DV SSL) | 企业型SSL (OV SSL) | 增强型SSL (EV SSL)
--- | --- | --- | ---
验证级别 | 最低 | 中等 | 最高
验证内容 | 仅验证域名所有权 | 验证域名所有权和组织信息 | 最严格的验证，包括法律、物理和运营存在的全面验证
验证流程 | 自动化验证（邮件、DNS记录等） | 半自动验证 | 人工审核为主
签发时间 | 几分钟到数小时 | 1-3个工作日 | 5-7个工作日
浏览器显示 | 普通锁图标 | 普通锁图标 | 地址栏绿色显示（部分浏览器已取消）
适用场景 | 个人博客、信息网站 | 企业网站、电子商务 | 银行、金融机构、大型电商
成本 | 低 | 中等 | 高
信任度 | 基本 | 中等 | 最高
证书信息 | 只包含域名信息 | 包含组织名称和域名 | 包含完整的组织详细信息
安全加密强度 | 相同 | 相同 | 相同

## 证书类型

有时候可以购买如`*.xxx.com`的通配符证书，即一个证书通用与所有子域名。以及还有其他如多域名证书和上面提到的DV/OV/EV证书的类型。

证书类型 | 覆盖范围 | 安全级别 | 验证过程 | 适用场景 | 价格范围
--- | --- | --- | --- | --- | ---
单域名证书 | 仅一个特定域名 | 基本到高 | DV/OV/EV | 个人网站或小型企业 | 低到高
通配符证书 | 主域名及其所有一级子域名 | 基本到中等 | DV/OV | 拥有多个子域名的网站 | 中等到高
多域名证书(SAN) | 多个不同域名 | 基本到高 | DV/OV/EV | 管理多个不相关域名的企业 | 中等到高
自签名证书 | 任意 | 低 | 无需验证 | 测试环境、内部网络 | 免费

Done.

Thanks for reading! Read other posts?

← 网络艺术:国内/国际骨干ISP线路整理 网络艺术:CDN技术与应用 →