# 自签名证书在线生成：支持 SAN 和 IP，本地生成

> 在浏览器里生成自签名 TLS 证书和私钥：RSA 或 ECDSA，支持域名和 IP 的 SAN、自定义有效期，可生成测试 CA。

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

为开发、测试或内网服务生成自签名证书和私钥，不用装任何软件。

自签名证书生成器在浏览器里生成自签名 X.509 证书和对应私钥。填主机名，补充其他域名或 IP，选好密钥类型和有效期，点 **生成证书**，就能得到证书、私钥和等价的 OpenSSL 命令。

## 怎么用

1. **通用名称**：主机名，比如 `dev.example.com` 或 `localhost`。
2. **SAN**：一行一个，比如 `localhost`、`127.0.0.1`、`::1`，也可以填内网 IP。客户端只看 SAN，不看 CN。
3. 选择密钥类型和有效天数（默认 365）。
4. 需要做测试 CA 时勾选 **作为 CA 证书**。
5. 点 **生成证书**，下载 `.crt` 和 `.key`。

等价的 OpenSSL 命令（OpenSSL 1.1.1+）：

```bash
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes \
  -keyout dev.key -out dev.crt -days 365 -subj '/CN=dev.example.com' \
  -addext 'subjectAltName=DNS:dev.example.com,DNS:localhost,IP:127.0.0.1' \
  -addext basicConstraints=critical,CA:FALSE -addext extendedKeyUsage=serverAuth
```

## 证书里有什么

服务器证书包含 `basicConstraints CA:FALSE`、`keyUsage digitalSignature`（RSA 另加 `keyEncipherment`）、`extendedKeyUsage serverAuth`、SAN 列表和主体密钥标识，序列号是随机的 128 位数。CA 证书则是 `CA:TRUE`，带 `keyCertSign` 和 `cRLSign`。

## 适用场景

- 本地开发和测试环境；
- 所有客户端都由你控制、可以分发证书的内网服务，比如内网管理后台、NAS、路由器；
- 搭建双向 TLS（mTLS）测试环境。

对公网提供服务一律用公开 CA 的证书。要转成 Windows 或 Java 用的格式，用 [PEM 转 PFX](https://ssl.sh/zh/tools/ssl-converter/pem-to-pfx/)；要查看证书内容，用[证书解析工具](https://ssl.sh/zh/tools/certificate-decoder/)。


## FAQ

**为什么浏览器还是提示不安全？**

自签名证书没有任何机构背书，在把证书（或签发它的测试 CA）导入操作系统或浏览器的信任库之前，浏览器会显示 NET::ERR_CERT_AUTHORITY_INVALID。

**公网网站能用自签名证书吗？**

不应该用，每个访客都会看到安全警告。公网网站用 Let's Encrypt 等公开 CA 的免费证书，配合 ACME 自动续期即可。

**有效期设多长？**

本地开发一般一到两年。公开 CA 的有效期上限不约束你手动信任的证书，但有效期短一些，私钥泄露时的影响也小一些。测试 CA 通常设几年。

**“作为 CA 证书”有什么用？**

生成一张能给别的证书签名的 CA 证书。把这张 CA 证书导入测试设备一次，以后用它签发的服务器证书都会被信任，不用每张证书单独导入。
