自签名证书和内网 CA 证书有什么区别?为什么浏览器会提示不安全?
简化版
自签名证书是自己给自己签发的证书,不在浏览器默认信任链里,所以浏览器无法确认它属于真正的站点,会提示不安全。
内网 CA 是企业自己建立的证书颁发机构,如果把内网根 CA 安装到客户端信任库,那么它签发的内网站点证书可以被信任。
两者都能加密传输,但信任来源不同:公有 CA 被浏览器默认信任,内网 CA 要组织内部下发信任,自签名证书通常只适合测试或受控环境。
详细版
浏览器验证证书时,会尝试构建证书链:
站点证书 -> 中间 CA -> 根 CA
如果根 CA 在系统或浏览器信任库中,证书链可信。
自签名证书通常是:
站点证书 -> 自己
浏览器没有预装这个根,因此会报错。
内网 CA 的做法是先让公司设备信任企业根 CA,再由企业 CA 签发各个内网站点证书。
这比每个服务各自使用自签名证书更可管理。
完整版教学
1. 先区分加密和信任
HTTPS 有两个目标:加密通信和认证身份。
自签名证书也可以建立加密连接。
但问题在于客户端不知道这张证书是不是攻击者伪造的。
浏览器提示不安全,重点不是“不能加密”,而是“无法验证身份”。
证书错误通常是身份信任问题,不等于 TLS 加密算法一定失效。
2. 自签名证书是什么
自签名证书由自己签发给自己。
简化链路:
CN=dev.local
Issuer=dev.local
Subject=dev.local
它没有被浏览器信任的公共 CA 签名。
所以陌生客户端无法判断它是真是假。
测试环境、临时开发环境可以使用,但不应直接用于公网生产。
3. 内网 CA 是什么
内网 CA 是组织内部建立的证书体系。
流程通常是:
- 创建企业根 CA。
- 通过 MDM、域控、镜像等方式把根 CA 下发到员工设备或服务器。
- 内网站点向企业 CA 申请证书。
- 客户端用已信任根 CA 验证这些证书。
这样内网服务也能使用 TLS,并有统一签发、吊销、轮换管理。
4. 三种证书信任模式对比
| 类型 | 谁签发 | 默认被浏览器信任 | 适合场景 |
|---|---|---|---|
| 公有 CA 证书 | 公开受信 CA | 是 | 公网站点 |
| 自签名证书 | 自己签自己 | 否 | 本地测试、临时环境 |
| 内网 CA 证书 | 企业 CA | 取决于是否下发根 CA | 企业内网、服务间通信 |
关键差别是信任锚在哪里。
5. 为什么不能随便点击继续访问
浏览器出现证书告警时,可能原因包括:
- 自签名证书不被信任。
- 证书过期。
- 域名不匹配。
- 证书链缺失。
- 证书被吊销。
- 中间人替换了证书。
如果用户习惯性忽略告警,就可能被中间人攻击。
开发环境可以导入自己的测试 CA,但生产用户不应被要求手动忽略证书错误。
6. 内网 CA 的管理风险
内网 CA 一旦被信任,就有很大权力。
如果企业根 CA 私钥泄露,攻击者可能签发任意内部域名证书。
所以内网 CA 要做好:
- 根 CA 离线保护。
- 中间 CA 分级。
- 证书模板和用途限制。
- 吊销机制。
- 审计日志。
- 自动轮换。
内部可信不代表可以粗放管理。
7. 常见误区与追问
- 误区:自签名证书不能加密。 它可以加密,但身份不被默认信任。
- 误区:内网证书就是自签名证书。 内网 CA 可以形成组织内部信任链,管理方式不同。
- 误区:浏览器提示不安全可以无脑忽略。 证书告警可能意味着中间人攻击。
- 追问:为什么安装企业根 CA 后内网站点可信? 因为客户端信任链能追溯到已安装的企业根。
- 追问:公网能用内网 CA 吗? 普通公网用户没有安装该根 CA,浏览器不会默认信任。
- 追问:内网 CA 私钥泄露有什么后果? 攻击者可能伪造内部站点证书,影响范围很大。
8. 加强记忆
自签名的问题不是“不能锁门”,而是“没人认识这把锁是谁发的”。
公有 CA 默认被大家认,内网 CA 要组织内部先认。