# 自签名证书是什么？定义、例子与常见误区

> 自签名证书是用自身私钥签名的证书，颁发者与主体相同，没有任何 CA 为它担保。

Source: https://ssl.sh/zh/glossary/self-signed-certificate/
Last updated: 2026-11-10

自签名证书由它所证明的那对密钥自己签名。从技术上说，所有 [根证书](https://ssl.sh/zh/glossary/root-certificate/) 都是自签名的，但这个词通常指管理员用 OpenSSL 等工具自己生成的服务器证书。客户端找不到可以核对的 CA，除非把这张证书本身加入 [信任库](https://ssl.sh/zh/glossary/trust-store/) 或手动添加例外，否则一律拒绝。

## 为什么重要
自签名证书的加密强度与 CA 签发的证书相同，但缺少身份认证：客户端无法区分你的证书和攻击者自己生成的证书。浏览器会报 MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT、NET::ERR_CERT_AUTHORITY_INVALID 等错误，命令行工具会报“self-signed certificate in certificate chain”。它适合本机开发、实验设备和临时测试；需要多人或多台机器共用时，搭建 [私有 CA](https://ssl.sh/zh/glossary/private-ca/) 更易管理；公网网站则完全可以通过 ACME 免费获得受信任的证书，阿里云、腾讯云等平台也提供免费的 DV 证书。

## 例子
```bash
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 的网站甚至不允许跳过。
- **自签名证书免费，适合公网网站。** 受信任的免费证书早已普及，自签名证书只适合你能控制所有客户端的场景。

## 相关术语

- [根证书](https://ssl.sh/zh/glossary/root-certificate/): 根证书是位于证书链顶端、由 CA 自签名的证书，预装在操作系统或浏览器的信任库中，作为验证其他证书的信任锚。
- [私有 CA](https://ssl.sh/zh/glossary/private-ca/): 私有 CA 是企业为自己的系统和设备搭建的证书颁发机构，其根证书只在企业主动安装的设备上受信任。
- [信任库](https://ssl.sh/zh/glossary/trust-store/): 信任库是操作系统、浏览器或编程语言运行时内置的一组根 CA 证书，验证证书链时以它们作为信任锚。
- [X.509](https://ssl.sh/zh/glossary/x509/): X.509 是 ITU-T 制定的公钥证书标准格式，其互联网配置规范 RFC 5280 规定了 TLS 所用证书的结构和验证方法。
- [OpenSSL](https://ssl.sh/zh/glossary/openssl/): OpenSSL 是开源密码学工具包，由 TLS 协议库 libssl、通用密码库 libcrypto 和 openssl 命令行工具组成。
- [基本约束](https://ssl.sh/zh/glossary/basic-constraints/): 基本约束是 X.509 证书扩展，用来声明该证书是否属于 CA，以及其下方还允许出现多少层 CA。
