前言
自签证书(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签发,用户访问时不会有安全警告(其拥有完整信任链,公开、透明、可查)。
自签证书会导致如下图的阻断提示:
这是一个非常好的问题,其实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证书就相当于你的毕业证和学信网记录,形成了一个可验证的信任链且全社会无条件信任它。
而自签证书,就如同仅凭口头声明,其真实性完全无法保障。有人可能会问,如果权威机构(如学信网)出错怎么办?这种可能性是存在的,但我们当前整个信任体系就构建于此,别无选择,我们最初设计的社会架构只能基于对根证书机构的信任来运作。
八、自签证书能破局吗?
本质上不能,至少在现有技术框架下难以实现。
自签证书其安全性非常脆弱,攻击者甚至无需控制网关,只需接入同一局域网,就有机会窃听和篡改数据。具体来看两种典型情况:
情况一:闯入的中间人(最最常见且危险)
- 攻击者伪造一个自签证书,冒充目标服务器。
- 当客户端发起请求时,攻击者拦截并用假证书响应。
- 浏览器弹出“此连接不受信任”的警告。
- 如果用户习惯性地点击“继续访问”,则客户端会与攻击者建立“加密”连接。此时,攻击者作为中间人,可以完全解密、窥视和篡改所有通信内容(其实只要中间人出现这种情况已不可避免)。
情况二:客户端预置证书(安全但实际上实施繁琐)
如果客户端(如设备或应用)提前将服务器的特定自签证书导入受信任列表,形成“证书钉扎”(Certificate Pinning),那么攻击者的伪造证书将立即被识别并拒绝。这种方式能有效防御中间人攻击,但证书的管理、分发和更新会带来巨大的运维复杂性。
九、既然不能,能补救吗?
当然可以,但也麻烦。
- 使用我们上文提到的证书扎钉,也就是预设,让设备仅仅信任这个预设的证书,这样是可以达到安全防护的要求的(我认为这种方案是安全性与成本的最好平衡)
- 还有一种就是自建CA体系,有成本。说白了就是一台根服务器,确保这台服务器处于你的绝对控制之下,通过这台服务器进行证书信任验证即可,这种方案看似简单,但是如果进行全球化部署就比较复杂了,你要做出一个类似于CA的服务架构。
当然还有很多其他的辅助方案,以上介绍的两点是基于厂商侧的解决方案,不依赖于客户侧做任何的安全辅助动作。
尾巴
本文没有生涩的技术表述与大片的代码展示,即希望能最大化降低阅读障碍与流畅度。最主要的还是希望通过本文能帮助你简单理解自签证书与CA证书的一些区别与应用,逐步构建起对互联网安全基础的认知,同时记住一个核心原则:任何面向公众用户的生产服务,都必须使用受信任的CA证书。