所有 SSL 文章 SSL 与证书

自签名证书 vs CA 签名证书

自签名证书是你自己创建的——你充当自己的证书颁发机构。CA 签名证书由受信任的证书颁发机构(如 Let’s Encrypt 或 DigiCert)签发,浏览器已经预置了对它们的信任。

实际区别:自签名证书触发浏览器安全警告,CA 签名证书不会。

对比

自签名CA 签名
创建者你(openssl 命令)受信任的 CA
浏览器信任❌ 警告:“不受信任”✅ 锁头图标
加密强度相同相同
费用免费免费(Let’s Encrypt)或付费
验证无——你为自己担保CA 验证域名/组织
使用场景开发、内部、测试生产网站
续签手动(你自定有效期)90 天(LE)或 1 年(付费)
中间人攻击防护⚠️ 弱——用户被训练点击跳过警告✅ 强——仅真正问题时显示警告

为什么自签名证书显示警告

浏览器基于签名者来信任证书。你的操作系统和浏览器自带约 100-150 个受信任的根 CA 列表。当服务器出示由这些 CA 之一签名的证书时,浏览器显示锁头图标。

自签名证书不是由任何受信任的 CA 签名的——它由自己的私钥签名。浏览器无法验证证书是否合法,因此显示警告。这是正确的行为——没有 CA 验证,任何人都可以创建声称是 google.com 的证书。

何时使用自签名证书

内部服务

不暴露于互联网的服务——内部仪表板、监控工具、数据库管理面板。你的团队可以将自签名 CA 添加到他们的信任存储中。

开发和测试

本地开发的快速 HTTPS,当你不想设置 mkcert 时。浏览器警告虽然烦人,但测试时功能上没问题。

物联网和嵌入式设备

与已知服务器通信并可以固定证书的设备——不涉及浏览器信任存储。

隔离网络

没有互联网访问的网络,Let’s Encrypt 的 ACME 协议无法触达。自签名是唯一选择。

何时不应使用自签名证书

任何面向公众的网站

用户看到吓人的警告然后离开。搜索引擎可能不会抓取使用不受信任证书的 HTTPS 页面。当 Let’s Encrypt 证书免费时,没有理由使用自签名。

任何处理用户数据的站点

自签名证书训练用户点击跳过安全警告——这与良好安全实践恰恰相反。当真正的攻击触发警告时,习惯点击”继续访问”的用户不会注意到。

如何创建自签名证书

# ECDSA (recommended)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
  -keyout key.pem -out cert.pem -days 365 -nodes \
  -subj "/CN=internal.example.com" \
  -addext "subjectAltName=DNS:internal.example.com,IP:10.0.0.5"

# RSA
openssl req -x509 -newkey rsa:2048 \
  -keyout key.pem -out cert.pem -days 365 -nodes \
  -subj "/CN=internal.example.com"

在服务器配置中使用生成的 cert.pemkey.pem。注意:不需要 fullchain.pemchain.pem——自签名证书没有证书链。

每种场景的更好替代方案

场景替代自签名,使用
生产网站Let’s Encrypt 通过 GetHTTPS —— 免费、受信任、5 分钟
本地开发mkcert —— 本地受信任、无警告
内部服务Let’s Encrypt(如果可访问互联网)或私有 CA
测试/预发布Let’s Encrypt 暂存环境 —— 无限测试证书

当 SSL 证书每年需要 $100 以上时,自签名证书是有意义的。现在 Let’s Encrypt 免费,除了真正隔离的环境外,几乎没有理由使用自签名。

常见问题

自签名证书比 CA 签名的安全性低吗?

加密完全相同——相同的算法、相同的密钥强度。区别在于信任:CA 签名证书通过受信任的第三方证明服务器身份。自签名证书什么都不证明——任何人都可以为任何域名创建一个。安全问题不在密码学,而在缺乏认证。

能让浏览器信任我的自签名证书吗?

可以,在你控制的机器上。将证书(或签署它的自签名 CA)导入操作系统/浏览器信任存储。这就是 mkcert 自动化的操作。但你不能让其他人的浏览器信任它——那需要真正的 CA。

我的主机商给了我自签名证书,这可以吗?

对于公开网站,不行。让你的主机商启用免费的 Let’s Encrypt(大多数主机都支持)。如果他们不支持,使用 GetHTTPS 自己获取受信任的证书。

为什么不直接创建自己的 CA?

可以,但浏览器不会信任它,除非你经历了漫长且昂贵的加入浏览器信任存储的过程。私有 CA 适用于内部基础设施(你的团队安装根证书),但不适用于公开网站。对于公开站点,使用受信任的 CA 如 Let’s Encrypt。

相关文章

SSL 与证书 2026-05-07
什么是证书颁发机构(CA)?
证书颁发机构签发 SSL 证书以证明网站身份。了解 CA 的工作原理、信任模型、主要 CA,以及 Let's Encrypt 如何改变了行业。
部署 2026-05-08
本地开发 HTTPS:localhost SSL 证书配置
使用 mkcert 在 localhost 上设置受信任的 HTTPS——无浏览器警告。涵盖 mkcert 配置、自签名证书以及为什么 Let's Encrypt 无法为 localhost 签发证书。
快速开始 2026-05-08
如何获取免费 SSL 证书(分步指南)
5 分钟从 Let's Encrypt 获取免费 SSL 证书 — 无需安装软件、无需注册账号。涵盖 4 种方法、两种验证方式、6 个平台的安装教程和故障排除。
在浏览器中获取免费 SSL 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书