SSL 证书生成:自签名和 CA

· 12 分钟阅读

目录

了解 SSL 证书

SSL 证书(现在技术上称为 TLS 证书,尽管 SSL 这个术语仍在使用)是验证网站身份并在客户端和服务器之间启用加密连接的数字文档。当您在浏览器地址栏中看到挂锁图标时,SSL 证书正在幕后工作以保护您的数据。

这些证书具有两个关键功能:它们验证您正在连接到您想要访问的合法服务器,并建立一个加密通道,您的数据通过该通道安全传输。如果没有 SSL 证书,密码、信用卡号和个人数据等敏感信息将以明文形式传输,容易被恶意行为者拦截。

SSL 证书的选择取决于几个因素:

了解这些因素有助于您为特定用例选择正确的证书类型,无论您是保护个人博客、电子商务平台还是内部企业应用程序。

自签名证书:何时以及如何使用

自签名证书是您自己生成和签名的 SSL 证书,无需涉及第三方证书颁发机构。服务器本质上为自己的身份担保,这就是为什么浏览器默认不信任它们的原因。

这些证书在加密方面完全有效——它们建立与 CA 签名证书相同的安全连接。区别在于信任:浏览器无法验证您的自签名证书是否合法,因此它们会向用户显示安全警告。

自签名证书的理想用例

自签名证书在不需要公共信任的特定场景中表现出色:

生成自签名证书

生成自签名证书最常用的工具是 OpenSSL,这是一个在大多数系统上可用的强大加密库。以下是创建自签名证书的基本命令:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj "/CN=localhost"

让我们分解每个参数的作用:

专业提示: 对于开发工作,您可以使用我们的 证书生成器 工具通过用户友好的界面创建自签名证书,无需命令行知识。

带有主题备用名称的高级自签名证书

现代浏览器需要主题备用名称 (SAN) 才能进行正确的证书验证。以下是如何创建具有多个域名的证书:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes \
  -subj "/CN=localhost" \
  -addext "subjectAltName=DNS:localhost,DNS:*.localhost,IP:127.0.0.1"

此证书适用于 localhost、localhost 的任何子域名以及 IP 地址 127.0.0.1,使其适用于本地开发场景。

优势和局限性

优势 局限性
完全免费生成 用户会看到浏览器安全警告
无外部依赖或审批流程 没有公共信任或验证
完全控制证书属性 不能用于面向公众的网站
即时生成和部署 需要在客户端设备上手动配置信任
非常适合测试和开发 没有保修或责任保护
无需互联网连接即可离线工作 可能被企业安全策略阻止

快速提示: 切勿在公众可访问的生产环境中使用自签名证书。安全警告会损害用户信任,并可能使访问者远离您的网站。

证书颁发机构:信任基础

证书颁发机构 (CA) 是验证身份并颁发 SSL 证书的可信第三方组织。它们构成了互联网信任基础设施的支柱,充当为网站真实性担保的数字公证人。

当 CA 颁发证书时,他们实质上是在说"我们已经验证了该组织控制此域名,我们愿意用我们的声誉为其担保。"浏览器和操作系统预装了受信任的根 CA 列表,这就是为什么 CA 签名的证书可以无缝工作而不会出现安全警告的原因。

证书颁发机构的工作原理

CA 系统基于分层信任模型运作:

  1. 根 CA – 最终的信任锚点,其证书嵌入在浏览器和操作系统中
  2. 中间 CA – 由根 CA 授权代表其颁发证书
  3. 终端实体证书 – 安装在 Web 服务器上的 SSL 证书

这种层次结构通过分隔提供安全性。根 CA 私钥保存在高度安全的环境中,通常是离线的,而中间 CA 处理日常证书颁发。如果中间 CA 被破坏,根 CA 可以撤销其权限而不影响整个信任链。

主要证书颁发机构

CA 领域包括商业提供商和非营利组织:

Let's Encrypt:免费且可信的 SSL

Let's Encrypt 在 2016 年推出时彻底改变了 SSL 证书的可访问性。这个由主要科技公司和组织赞助的非营利证书颁发机构提供具有完全浏览器信任的免费 SSL 证书。

该项目的使命是通过消除 HTTPS 采用的成本和复杂性障碍来创建一个更安全、更尊重隐私的网络。如今,Let's Encrypt 颁发的证书数量超过所有其他 CA 的总和,保护着数亿个网站。

Let's Encrypt 的主要功能

开始使用 Let's Encrypt

使用 Let's Encrypt 的推荐方式是通过 Certbot,这是一个处理证书颁发和续订的自动化客户端。以下是 Web 服务器的基本工作流程:

# 安装 Certbot(Ubuntu/Debian 示例)
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

# 为 Nginx 获取并安装证书
sudo certbot --nginx -d example.com -d www.example.com

# 测试自动续订
sudo certbot renew --dry-run

Certbot 会自动配置您的 Web 服务器,获取证书并设置自动续订。整个过程只需几分钟。

替代 ACME 客户端

虽然 Certbot 是官方客户端,但有几个替代方案提供不同的功能和方法:

专业提示: Let's Encrypt 使用 ACME 协议进行证书颁发。了解 ACME 挑战(HTTP-01、DNS-01、TLS-ALPN-01)有助于排除故障并为您的基础设施选择正确的验证方法。

何时 Let's Encrypt 可能不理想

尽管有其优势,Let's Encrypt 并不适合所有场景:

商业 SSL 证书:额外保障

来自付费证书颁发机构的商业 SSL 证书提供免费选项之外的功能和保障。虽然加密强度与 Let's Encrypt 相同,但商业证书包含对某些用例很重要的额外好处。

为什么选择商业证书

组织出于几个令人信服的原因选择付费证书:

商业证书定价

价格因验证级别和功能而异:

证书类型 典型年度费用 最适合
域名验证 (DV)
We use cookies for analytics. By continuing, you agree to our Privacy Policy.