自签名证书 (Self-Signed Certificate)
定义
自签名证书是用自身私钥签名的证书,颁发者与主体相同,没有任何 CA 为它担保。
自签名证书由它所证明的那对密钥自己签名。从技术上说,所有 根证书 都是自签名的,但这个词通常指管理员用 OpenSSL 等工具自己生成的服务器证书。客户端找不到可以核对的 CA,除非把这张证书本身加入 信任库 或手动添加例外,否则一律拒绝。
为什么重要
自签名证书的加密强度与 CA 签发的证书相同,但缺少身份认证:客户端无法区分你的证书和攻击者自己生成的证书。浏览器会报 MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT、NET::ERR_CERT_AUTHORITY_INVALID 等错误,命令行工具会报“self-signed certificate in certificate chain”。它适合本机开发、实验设备和临时测试;需要多人或多台机器共用时,搭建 私有 CA 更易管理;公网网站则完全可以通过 ACME 免费获得受信任的证书,阿里云、腾讯云等平台也提供免费的 DV 证书。
例子
openssl req -x509 -newkey rsa:2048 -nodes -days 30 \
-keyout localhost.key -out localhost.crt \
-subj "/CN=localhost" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
其中 SAN 必不可少,因为浏览器不看 CN。
常见误区
- 自签名证书不加密或加密较弱。 加密强度完全相同,缺的只是身份证明。
- 点“继续访问”没什么风险。 这会让用户习惯忽略警告,而攻击者的证书弹出的是同样的警告;启用了 HSTS 的网站甚至不允许跳过。
- 自签名证书免费,适合公网网站。 受信任的免费证书早已普及,自签名证书只适合你能控制所有客户端的场景。