自签名证书的核心价值在于零成本和完全控制权,但安全缺陷也很明显,一是证书管理成本(每个服务器单独签发),二是缺乏OCSP等吊销机制,三是移动端同样会报错。因此自签名 SSL 证书是由创建者自己签发,而非受信任的证书颁发机构(CA)签发的证书。它们有其特定的优缺点,适用于特定场景,但在生产环境(尤其是面向公众的服务)中存在显著风险。

主要优点:

完全免费:

最大的优势就是零成本。你不需要向商业 CA 支付任何费用来获取证书。

即时签发

创建过程非常快速,无需等待 CA 的审核、验证和签发流程,几秒钟即可生成并使用。

完全控制权

你拥有证书的根密钥,对证书的生命周期(创建、分发、吊销)拥有绝对控制权。

无需依赖第三方 CA 的服务或策略。

隐私:

申请证书时不需要向 CA 提交域名、组织或个人身份信息,理论上保护了隐私(但证书本身信息通常是公开的)。

内部/测试环境理想:

核心优势场景: 非常适合封闭的内部网络(如开发、测试、预发布环境)、本地开发环境(localhost)、物联网设备内部通信或仅供特定受控客户端访问的服务。在这些场景下,可以方便地预先在客户端或设备上安装并信任该自签名根证书,从而规避浏览器警告。

加密功能

与 CA 签发的证书一样,能提供传输过程中的加密(TLS/SSL),防止数据在传输过程中被窃听。这是其最基本也是最重要的功能之一。

主要缺点

不受浏览器/操作系统信任

最核心的缺点: 浏览器和操作系统内置了受信任的根 CA 列表。自签名证书的根不在这个列表中,因此访问使用自签名证书的网站时,用户会遇到严重的警告页面(如 Chrome 的 NET::ERR_CERT_AUTHORITY_INVALID,红色三角或锁图标划红线)。这会严重损害用户体验和信任度,用户可能会因安全警告而放弃访问。

无第三方身份验证

商业 CA 在签发证书前会对申请者的域名所有权(DV)、组织信息(OV)或进行更严格的身份和法律验证(EV)。自签名证书完全没有这种验证。用户无法仅凭证书本身确认他们正在连接的是真正的、合法的网站所有者,而不是一个冒名顶替的中间人攻击者。

易受中间人攻击

由于缺乏信任链和身份验证,攻击者可以轻松地创建一个针对目标网站的自签名证书(或使用其他无效证书)进行中间人攻击。用户看到的警告与访问一个合法但使用了自签名证书的站点看到的警告是一样的,普通用户难以区分,可能因习惯性忽略警告而中招。

管理复杂(尤其是规模大时):

在大型内部网络中,需要手动在每一台需要连接的客户端设备或浏览器上安装并信任你的自签名根证书。这涉及分发、安装、更新(证书到期或密钥泄露时需要更换根证书)、吊销等一系列管理工作,随着设备数量增加,管理负担显著增大,容易出错。

证书生命周期管理

你需要自己负责设置合理的有效期、及时轮换到期证书、妥善保管私钥(一旦私钥泄露,所有使用该根签发的证书都变得不安全)以及处理证书吊销(自签名证书通常没有有效的 CRL 或 OCSP 机制)。

专业形象受损

对于任何面向公众的网站或服务(如电商、登录页面、API),使用自签名证书并让用户看到安全警告,会显得非常不专业,极大损害品牌信誉和用户信任,可能导致用户流失。

移动端支持同样不佳

移动设备(iOS, Android)上的浏览器和应用同样不信任自签名证书,用户会遇到类似的难以理解的警告。

总结与建议

优点: 免费、快速、完全控制、提供加密。非常适合内部网络、开发测试环境、localhost 以及可以严格控制客户端证书信任的场景。

缺点: 不被任何公共客户端信任(导致严重安全警告)、无身份验证(易受中间人攻击)、管理复杂、损害专业形象。绝对不适合面向公众的互联网服务(网站、API、邮件服务器等)。

替代方案

面向公众的服务: 强烈推荐使用受信任的 CA 签发的证书。

免费: 使用 Let's Encrypt 等非营利 CA 提供的免费、自动化的 DV 证书。

付费: 根据需求选择 DV、OV 或 EV 证书,获得不同级别的验证和功能(如更长的有效期、更好的兼容性保证、保险等)。

大型内部网络/企业环境: 考虑部署私有 PKI(公钥基础设施)。你可以建立自己内部的根 CA,并为其根证书在所有内部设备上建立信任。然后由这个内部 CA 为内部服务器和设备签发受信任的证书。这比管理一堆分散的自签名证书要安全和高效得多(需要专业的 IT 知识来搭建和维护)。

本地开发: 自签名或为 localhost 签发的证书是常见做法(需要开发者在自己的机器上信任该证书)。有些工具(如 mkcert)可以简化这个过程,创建一个本地受信任的 CA 来为开发域名签发证书。

核心原则: 是否使用自签名证书,关键在于访问该服务的客户端是否能够且方便地被预先配置为信任你的

通过上面对自签名SSL证书几点论述,知道了自签名证书的适用范围,所以自签名根证书。如果可以(如内部环境、开发环境),它是可行方案。如果不可以(如公众互联网用户),则必须使用受信任 CA 签发的证书。