自签证书在生产的处理
生产环境直接使用自签名证书会让浏览器弹出信任警告,应用端则常见「证书链中含自签证书」这类错误。根因不在算法强度,而在信任分发:客户端必须预先信任签发者,否则无法建立信任链。可行路径是用私有 CA 签发并统一分发根证书,或改用公信 CA 的自动化签发;测试环境也建议走同一套信任体系,避免上线时才踩坑。
基本信息
| 错误码 18 | 深度 0 处为自签名证书 |
|---|---|
| 错误码 19 | 证书链中含自签证书 |
| 合规做法 | 私有 CA 加受控分发根证书,或使用公信 CA |
| 关键认识 | 问题在信任分发,不在密钥长度 |
典型使用场景
- 内网系统:自建私有 CA 统一签发与管理
- 开发测试:让测试环境信任体系与生产一致
- 排错:应用报链中含自签证书时确认签发者
- 设备管理:给固定设备签发专属证书并分发根
- 决策:判断升级到公信证书还是维持私有体系
验证私有 CA 签发链
验证私有 CA 签发链
openssl verify -CAfile ca.pem leaf.pem # 期望输出 leaf.pem: OK
openssl verify leaf.pem # 不带根会报找不到签发者
openssl x509 -in leaf.pem -noout -subject -issuer # 确认签发者是否为私有 CA
openssl x509 -in ca.pem -noout -subject -ext basicConstraints # 确认根证书属性处理方式对比
| 方式 | 信任分发 | 适用 |
|---|---|---|
| 公信 CA 证书 | 浏览器与系统内置 | 对外服务首选 |
| 私有 CA 签发 | 分发根证书到客户端 | 内网系统与服务间通信 |
| 自签叶证书 | 无法批量预设信任 | 仅限临时调试 |
| 客户端关闭校验 | 无 | 任何生产场景都不可取 |
自签证书的问题在信任分发而非算法:客户端必须预先信任对应根证书,规模稍大时就应改为私有 CA 体系,而不是逐台导入叶证书。
落地建议
- 为私有 CA 建立根证书与中间 CA 的两层结构
- 根证书通过配置管理或设备管理平台统一下发
- 给临时调试证书设置短有效期,避免留在生产环境
- 定期检查客户端信任库中是否混入不该存在的根
为绕过警告在客户端全局关闭校验,会把中间人攻击的门一起打开;这类做法在移动端与桌面端都可能被恶意网络环境利用。