SSL 证书生成:自签名和 CA
· 12 分钟阅读
目录
了解 SSL 证书
SSL 证书(现在技术上称为 TLS 证书,尽管 SSL 这个术语仍在使用)是验证网站身份并在客户端和服务器之间启用加密连接的数字文档。当您在浏览器地址栏中看到挂锁图标时,SSL 证书正在幕后工作以保护您的数据。
这些证书具有两个关键功能:它们验证您正在连接到您想要访问的合法服务器,并建立一个加密通道,您的数据通过该通道安全传输。如果没有 SSL 证书,密码、信用卡号和个人数据等敏感信息将以明文形式传输,容易被恶意行为者拦截。
SSL 证书的选择取决于几个因素:
- 验证级别 – 证书颁发机构验证您身份的彻底程度
- 域名覆盖范围 – 单个域名、多个子域名或多个域名
- 信任要求 – 您是否需要公共浏览器信任或仅限内部使用
- 预算限制 – 免费选项与具有附加功能的付费证书
- 保修和支持 – 保险覆盖范围和技术援助级别
了解这些因素有助于您为特定用例选择正确的证书类型,无论您是保护个人博客、电子商务平台还是内部企业应用程序。
自签名证书:何时以及如何使用
自签名证书是您自己生成和签名的 SSL 证书,无需涉及第三方证书颁发机构。服务器本质上为自己的身份担保,这就是为什么浏览器默认不信任它们的原因。
这些证书在加密方面完全有效——它们建立与 CA 签名证书相同的安全连接。区别在于信任:浏览器无法验证您的自签名证书是否合法,因此它们会向用户显示安全警告。
自签名证书的理想用例
自签名证书在不需要公共信任的特定场景中表现出色:
- 开发环境 – 在部署前本地测试 HTTPS 功能
- 内部网络 – 保护从不面向公共互联网的服务器之间的通信
- 物联网设备 – 在受控网络内通信的嵌入式系统
- 测试和预发布服务器 – 可以接受安全警告的预生产环境
- 个人项目 – 家庭实验室和学习环境
生成自签名证书
生成自签名证书最常用的工具是 OpenSSL,这是一个在大多数系统上可用的强大加密库。以下是创建自签名证书的基本命令:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes -subj "/CN=localhost"
让我们分解每个参数的作用:
req -x509– 创建自签名证书而不是证书签名请求-newkey rsa:4096– 生成新的 4096 位 RSA 私钥(比默认的 2048 位更强)-keyout key.pem– 将私钥保存到此文件-out cert.pem– 将证书保存到此文件-sha256– 使用 SHA-256 哈希算法(安全且广泛支持)-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 系统基于分层信任模型运作:
- 根 CA – 最终的信任锚点,其证书嵌入在浏览器和操作系统中
- 中间 CA – 由根 CA 授权代表其颁发证书
- 终端实体证书 – 安装在 Web 服务器上的 SSL 证书
这种层次结构通过分隔提供安全性。根 CA 私钥保存在高度安全的环境中,通常是离线的,而中间 CA 处理日常证书颁发。如果中间 CA 被破坏,根 CA 可以撤销其权限而不影响整个信任链。
主要证书颁发机构
CA 领域包括商业提供商和非营利组织:
- DigiCert – 最大的商业 CA 之一,以企业解决方案而闻名
- Sectigo(前身为 Comodo) – 以具有竞争力的价格提供各种证书类型
- GlobalSign – 专注于企业 PKI 和物联网安全
- Let's Encrypt – 提供免费自动化证书的非营利组织
- GoDaddy – 在小型企业和个人网站所有者中很受欢迎
- Entrust – 专注于金融机构的高保障证书
Let's Encrypt:免费且可信的 SSL
Let's Encrypt 在 2016 年推出时彻底改变了 SSL 证书的可访问性。这个由主要科技公司和组织赞助的非营利证书颁发机构提供具有完全浏览器信任的免费 SSL 证书。
该项目的使命是通过消除 HTTPS 采用的成本和复杂性障碍来创建一个更安全、更尊重隐私的网络。如今,Let's Encrypt 颁发的证书数量超过所有其他 CA 的总和,保护着数亿个网站。
Let's Encrypt 的主要功能
- 完全免费 – 没有隐藏费用或高级层级
- 自动颁发 – 证书可以在无需人工干预的情况下获取和续订
- 仅域名验证 – 专注于验证域名控制,而非组织身份
- 90 天有效期 – 较短的生命周期鼓励自动化并降低证书泄露的风险
- 通配符支持 – 可以使用单个证书保护无限的子域名
- 完全浏览器信任 – 被所有主要浏览器和操作系统认可
开始使用 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 是官方客户端,但有几个替代方案提供不同的功能和方法:
- acme.sh – 具有最少依赖项的轻量级 shell 脚本
- Caddy – 使用 Let's Encrypt 内置自动 HTTPS 的 Web 服务器
- Traefik – 具有原生 Let's Encrypt 集成的反向代理
- win-acme – 专注于 Windows 的客户端,带有 GUI 和计划任务
专业提示: Let's Encrypt 使用 ACME 协议进行证书颁发。了解 ACME 挑战(HTTP-01、DNS-01、TLS-ALPN-01)有助于排除故障并为您的基础设施选择正确的验证方法。
何时 Let's Encrypt 可能不理想
尽管有其优势,Let's Encrypt 并不适合所有场景:
- 组织验证需求 – Let's Encrypt 仅提供域名验证
- 扩展验证要求 – Let's Encrypt 不提供
- 保修要求 – 没有财务保修或责任保险
- 更长的有效期 – 一些组织出于管理简便性更喜欢年度证书
- 离线或隔离系统 – 需要互联网连接进行验证
商业 SSL 证书:额外保障
来自付费证书颁发机构的商业 SSL 证书提供免费选项之外的功能和保障。虽然加密强度与 Let's Encrypt 相同,但商业证书包含对某些用例很重要的额外好处。
为什么选择商业证书
组织出于几个令人信服的原因选择付费证书:
- 扩展验证 – 在浏览器地址栏中显示公司名称(尽管此功能正在逐步淘汰)
- 财务保修 – 针对与证书相关的违规行为提供 10,000 美元至 2,000,000 美元的保险
- 专属支持 – 电话和电子邮件协助安装和故障排除
- 更长的有效期 – 最长 397 天(浏览器标准允许的最大值)
- 组织验证 – 证书详细信息中经过验证的公司信息
- 信任标志 – 可显示的徽章,可能会增加客户信心
- 多年购买 – 预先购买多年(尽管证书必须每年重新颁发)
商业证书定价
价格因验证级别和功能而异:
| 证书类型 | 典型年度费用 | 最适合 |
|---|---|---|
| 域名验证 (DV) |