SSL/TLS 证书是一份数字文件,用来证明网站的身份,并让您的浏览器能与该网站建立加密的 HTTPS 连接。它把域名与公钥绑定在一起,并由浏览器已经信任的证书颁发机构(CA)签名。
每当您在地址栏中看到 https:// 和挂锁或类似的标识时,就说明片刻之前刚刚验证过一份证书。证书同时承担两项工作:验证服务器身份,让您知道自己连接的是真正的 example.com 而不是冒牌网站;并启用加密,让网络路径上的任何人都无法读取或篡改您发送的内容。
SSL 和 TLS 有什么区别?
SSL(Secure Sockets Layer,安全套接字层)是最初的协议,由 Netscape 于 20 世纪 90 年代开发。后来它被 TLS(Transport Layer Security,传输层安全)取代,如今 SSL 的所有版本都被视为不安全,并已被正式弃用。TLS 1.0 和 1.1 也已在 RFC 8996(2021 年)中被弃用,因此现代连接使用的是 TLS 1.2 或 TLS 1.3。
不过“SSL 证书”这个名称一直沿用至今。证书本身并不与某个协议版本绑定,同一份证书可用于任何 TLS 版本。“SSL 证书”“TLS 证书”和“HTTPS 证书”说的是同一样东西。
TLS 握手是如何进行的
在交换任何网页数据之前,浏览器和服务器会先进行握手。简化后,TLS 1.3 的握手过程如下:
- Client hello(客户端问候)。浏览器通常通过 443 端口发起连接,并告知自己支持哪些 TLS 版本和密码套件。它会带上想访问的主机名(通过服务器名称指示 SNI 扩展,使一个 IP 地址可以托管许多网站)以及自己的密钥交换份额。
- Server hello(服务器问候)。服务器选定参数,发送自己的密钥份额,并出示它的证书,同时附上一个签名,证明它持有与之匹配的私钥。
- 验证。浏览器检查证书是否涵盖该主机名、是否在有效期内,以及能否沿证书链追溯到受信任的根 CA。
- 会话密钥。双方根据密钥交换各自推导出相同的对称会话密钥,此后所有流量都用它加密。
私钥永远不会离开服务器。公钥加密只用于身份验证和协商密钥,大量数据则用 AES-GCM 或 ChaCha20-Poly1305 等快速的对称密码加密。TLS 1.3 只需一次往返即可完成握手,而 TLS 1.2 需要两次。
证书里有什么
证书遵循 X.509 标准,其中包括以下字段:
- 主体备用名称(SAN):证书适用的主机名。浏览器检查的是这份列表,而不是较旧的通用名称字段。
- 公钥:服务器的 RSA 或 ECDSA 公钥。
- 颁发者:签发该证书的 CA。
- 有效期:“Not Before”(生效)和“Not After”(失效)日期。
- 序列号和签名:唯一标识符,以及颁发者对以上全部内容的签名。
SAN 证书与通配符证书
一份证书可以通过把多个名称列为 SAN 来涵盖它们,例如 example.com、www.example.com 和 shop.example.com。通配符证书(如 *.example.com)涵盖该层级上的任意单个标签,因此可以匹配 www.example.com 和 api.example.com,但不匹配 example.com 本身,也不匹配 a.b.example.com 这样更深层的名称。这就是为什么通配符证书通常会把裸域名作为额外的 SAN 列出。
DV、OV 和 EV 证书
证书的区别在于 CA 在签发前对申请人审查的严格程度:
| 类型 | 验证内容 | 典型用途 |
|---|---|---|
| 域名验证(DV) | 仅验证申请人控制该域名,方式为 DNS 记录、网站上的文件或电子邮件 | 大多数网站;几秒钟内自动签发 |
| 组织验证(OV) | 域名控制权,加上组织的合法存在 | 希望在证书详情中显示公司名称的企业 |
| 扩展验证(EV) | 对法律实体更严格、更标准化的审查 | 部分银行和大型公司 |
三者提供的加密强度完全相同,区别只在于身份信息。主流浏览器大约在 2019 年停止为 EV 证书显示特殊的绿色公司名称,所以对大多数网站来说,DV 证书是实用的选择。
信任链
您的操作系统和浏览器自带一个根证书库:即它们所信任的根 CA 证书列表。根 CA 很少直接签发网站证书,而是签发中间证书,再由中间证书签发叶子(服务器)证书:
Root CA (in the browser's trust store)
└── Intermediate CA (sent by the server)
└── www.example.com (leaf certificate, sent by the server)
服务器必须同时发送其叶子证书和中间证书。随后浏览器会逐级验证每个签名,直至它已经信任的根证书。这种安排让根密钥可以离线保存并得到良好保护。为防范错误签发,受公众信任的证书还会被记录在公开的证书透明度日志中,域名所有者也可以用 CAA DNS 记录限制哪些 CA 可以为其签发证书,详见我们的 DNS 记录类型指南。
Let's Encrypt 与证书有效期
非营利性 CA Let's Encrypt 让免费的 DV 证书走向普及。它的证书有效期为 90 天,设计上通过 ACME 协议自动续期,可使用 Certbot 等客户端,或许多 Web 服务器和主机面板内置的功能。如今大多数托管服务商和 CDN 都能自动签发和续期证书,无需任何手动操作。
整个行业的证书有效期都在变短。根据 CA/Browser Forum 的 SC-081 投票案,受公众信任的 TLS 证书最长有效期正在分阶段缩短,从 2026 年 3 月起为 200 天,并在之后几年进一步下调。具体时间表可能仍会调整,但方向很明确:请将续期自动化,因为手动续期证书将变得越来越不现实。
常见证书错误及解决方法
证书已过期
浏览器会显示 NET::ERR_CERT_DATE_INVALID 之类的错误。请续期证书并重新加载 Web 服务器。然后查明自动续期失败的原因,常见的有防火墙阻止了验证、DNS 发生变更或计划任务失效。访问者设备上的时钟不正确也可能导致同样的错误,因此如果只有一台设备报错,请检查它的日期。
名称不匹配
ERR_CERT_COMMON_NAME_INVALID 之类的错误表示地址栏中的主机名不在证书的 SAN 列表中,例如为 www.example.com 签发的证书被用在了 example.com 上。请重新签发证书,使其包含您提供服务的所有主机名,或者把访问者重定向到已被涵盖的名称。
证书链不完整
如果服务器只发送叶子证书而没有中间证书,有些浏览器会设法获取或缓存缺失的部分,而另一些浏览器以及许多命令行工具和应用则会失败。请为服务器配置完整的证书链文件(通常叫 fullchain.pem)。
自签名或不受信任的颁发者
NET::ERR_CERT_AUTHORITY_INVALID 表示证书链没有指向受信任的根证书,通常是因为证书为自签名或来自私有 CA。这在内部测试时没问题,但不适用于公开网站,请换成公共 CA 签发的证书。当杀毒软件或企业代理拦截 HTTPS 时,也可能出现同样的错误。
混合内容
证书有效,但页面通过普通的 http:// 加载脚本或图片。请把这些 URL 改为 HTTPS,并考虑添加 HSTS 响应头,使浏览器始终使用 HTTPS。
openssl s_client -connect example.com:443 -servername example.com 会打印服务器发送的完整证书链。常见问题
HTTPS 是否意味着网站是安全的?
不是。HTTPS 只表示您与网站之间的连接是加密的,并且该网站控制着所显示的域名。钓鱼网站完全可以拥有有效的 DV 证书,而且确实存在。请务必核对域名本身。
免费证书比付费证书更不安全吗?
不会。Let's Encrypt 的免费 DV 证书提供的加密与付费证书相同。付费证书可能附带身份验证(OV/EV)、保险赔付或技术支持,但加密强度并不会更高。
SSL 证书的有效期是多久?
Let's Encrypt 证书的有效期为 90 天。其他公共 CA 受 CA/Browser Forum 规定的最长有效期约束,该上限自 2026 年起从 200 天开始分阶段缩短。自动续期是最稳妥的做法。
HTTPS 使用哪个端口?
HTTPS 默认使用 TCP 443 端口,而普通 HTTP 使用 80 端口。更多内容请参阅我们的常见网络端口指南。