CA证书与自签证书你都了解吗?

211 阅读8分钟

前言

自签证书(Self-signed Certificate)和CA证书(CA证书,Certificate Authority Certificate)都是互联网世界通信解决方案中的重要组成部分,也是最重要的基石之一。了解它们你将对互联网安全有更进一步的理解。但是我们还是要明确无论是自签还是CA签发,加密算法、密钥长度等技术参数一样,数据传输层安全性是一样的。区别在于“信任”,也就是谁来证明公钥属于你。


一、定义和原理

1. 自签证书(Self-signed Certificate)

  • 定义:自己生成的SSL证书,签发者(issuer)和持有者(subject)是同一个主体(通常是你自己或你的服务器)。
  • 签发方式:使用OpenSSL等工具自己生成私钥、公钥,并用自己的私钥对证书签名。
  • 信任链:没有第三方权威机构参与(也解决不了你就是你的这个问题),浏览器或操作系统不会自动信任。

举例

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

2. CA证书(CA证书,Certificate Authority Certificate)

  • 定义:由第三方权威数字证书颁发机构(CA)签发的SSL证书,CA会验证你的身份后,用自己的私钥对你的证书签名。
  • 签发方式:你向CA提交CSR(证书签名请求),CA审核通过后,用自己的根证书或中间证书为你签名并发放证书。在现实世界中大多数云服务商都会提供此项服务,也就是代理啦。
  • 信任链:浏览器、操作系统内置了CA的根证书,自动无条件信任这些CA签发的证书。

常见CA有:DigiCert、Symantec、Let's Encrypt、阿里云CA、腾讯云CA等。


二、信任机制

  • 自签证书:不被浏览器和操作系统信任。访问HTTPS网站时会提示“不受信任的证书”或“安全警告”。当你忽略这些警告那么你就可以正常happy上网冲浪了,看似很美好,背后杀机重重啊。
  • CA证书:由被各大浏览器、操作系统信任的CA签发,用户访问时不会有安全警告(其拥有完整信任链,公开、透明、可查)。

自签证书会导致如下图的阻断提示:

Screenshot 2025-10-30 at 17.18.22.png

image.png 这是一个非常好的问题,其实HTTP是明文传输协议,数据不会加密,也没有任何身份验证和安全校验机制,所以浏览器不会阻断。 为什么用了更安全的https却出现了阻断访问的情况? HTTPS是加密传输协议,它在 HTTP 上增加了 SSL/TLS 层,要求服务器提供“数字证书”来证明自己的身份。 只有“被信任的证书”才会继续访问,否则警告或阻断,这时候自签证书就出现问题了,不能证明自己是合法的CA证书,浏览器出于安全考虑主动阻断用户访问行为。

三、主要区别

区别点自签证书CA证书(CA证书)
签发者你自己第三方权威CA机构
信任链有,浏览器/系统内置CA根证书
成本免费,自己生成部分免费(如Let's Encrypt),大多需付费
适用场景内部测试、开发环境、封闭网络生产环境、对公网开放、需要被用户信任的场合
浏览器警告
安全性理论拥有等效加密,但易被攻击有CA审查及信任链,安全性极高

四、应用场景

  • 自签证书

    • 内部测试、开发环境
    • 内部系统、内网服务
    • 不对外开放的服务(如公司内部OA、测试API等)
  • CA证书

    • 对公网开放的网站和服务
    • 商业服务(电商、银行、SaaS等)
    • 需要获得终端用户信任的场景

五、简单总结

  • 自签证书:适合开发、测试及内部环境。无需成本,但绝不能用于生产环境,用户访问时会触发浏览器安全警告。事实上,主流浏览器早已考虑严格限制甚至封禁自签证书,因为它们极易被伪造和劫持,带来严重的安全隐患。
  • CA证书必须用于生产环境及对外服务。由受信任的权威机构签发,被所有主流浏览器和操作系统认可,不仅能保障通信安全、赢得用户信任,还对网站的SEO排名有积极影响

六、自签证书问题多,为何仍很常见?

这个问题触及了本质:根源在于CA体系本身的不便性与高昂成本

理论上,所有通信都可以CA证书。但在现实中,许多特定的场景是难以落地的。例如:

  • 智能家居设备:一个单节点的智能终端(本身即微型服务器)与家庭内其他设备通信。厂家不可能为成千上万的每台设备都单独申请CA证书。这既不现实,成本也无法承受。
  • 嵌入式与物联网设备:大量类似的单节点终端服务设备,都面临同样的困境。

因此,自签证书的普遍性,反映了在特定约束下的一种“不得已而为之”的现状。


七、自签证书的根本问题是什么?

核心问题在于:无法建立可信的身份认证

为什么无法认证?因为它缺少一个绝对权威的第三方信用背书。这就像一个求职者自称毕业于清华大学,却无法提供学信网可查的学历证明,其真实性自然存疑。CA证书就相当于你的毕业证和学信网记录,形成了一个可验证的信任链且全社会无条件信任它。

而自签证书,就如同仅凭口头声明,其真实性完全无法保障。有人可能会问,如果权威机构(如学信网)出错怎么办?这种可能性是存在的,但我们当前整个信任体系就构建于此,别无选择,我们最初设计的社会架构只能基于对根证书机构的信任来运作。


八、自签证书能破局吗?

本质上不能,至少在现有技术框架下难以实现。

自签证书其安全性非常脆弱,攻击者甚至无需控制网关,只需接入同一局域网,就有机会窃听和篡改数据。具体来看两种典型情况:

情况一:闯入的中间人(最最常见且危险)

  1. 攻击者伪造一个自签证书,冒充目标服务器。
  2. 当客户端发起请求时,攻击者拦截并用假证书响应。
  3. 浏览器弹出“此连接不受信任”的警告。
  4. 如果用户习惯性地点击“继续访问”,则客户端会与攻击者建立“加密”连接。此时,攻击者作为中间人,可以完全解密、窥视和篡改所有通信内容(其实只要中间人出现这种情况已不可避免)。

情况二:客户端预置证书(安全但实际上实施繁琐)

如果客户端(如设备或应用)提前将服务器的特定自签证书导入受信任列表,形成“证书钉扎”(Certificate Pinning),那么攻击者的伪造证书将立即被识别并拒绝。这种方式能有效防御中间人攻击,但证书的管理、分发和更新会带来巨大的运维复杂性。


九、既然不能,能补救吗?

当然可以,但也麻烦。

  1. 使用我们上文提到的证书扎钉,也就是预设,让设备仅仅信任这个预设的证书,这样是可以达到安全防护的要求的(我认为这种方案是安全性与成本的最好平衡)
  2. 还有一种就是自建CA体系,有成本。说白了就是一台根服务器,确保这台服务器处于你的绝对控制之下,通过这台服务器进行证书信任验证即可,这种方案看似简单,但是如果进行全球化部署就比较复杂了,你要做出一个类似于CA的服务架构。

当然还有很多其他的辅助方案,以上介绍的两点是基于厂商侧的解决方案,不依赖于客户侧做任何的安全辅助动作。

尾巴

本文没有生涩的技术表述与大片的代码展示,即希望能最大化降低阅读障碍与流畅度。最主要的还是希望通过本文能帮助你简单理解自签证书与CA证书的一些区别与应用,逐步构建起对互联网安全基础的认知,同时记住一个核心原则:任何面向公众用户的生产服务,都必须使用受信任的CA证书。