自签证书生成器
在浏览器本地生成自签名 SSL/TLS 证书,适用于本地 HTTPS 开发测试、内网服务器和 Docker 容器
在浏览器本地生成自签名 SSL/TLS 证书,支持自定义域名、IP、SAN,适用于本地开发、内网服务器和 Docker 容器,所有操作均在本地完成,私钥不会上传。
场景模版:
证书信息配置
每行一个,支持
DNS:域名 和 IP:地址生成结果
填写左侧配置后点击「生成证书」
或点击上方场景快速填入并生成
关于自签证书生成器
- 自签名证书由自己签发,不经过 CA 机构,浏览器会显示安全警告,但 HTTPS 加密功能完整
- 适用场景:本地 HTTPS 开发(localhost)、内网服务器、Docker 容器、测试环境
- SAN(主题备用名称)字段支持多域名和 IP,Chrome 58+ 要求证书必须包含 SAN 字段
操作说明
- 点击上方使用场景(本地开发 / 内网服务器 / Docker 容器 / 通配符域名),可一键填入对应配置,再点击「生成证书」生成
- 填写 CN(通用名称,通常是域名或 IP),其他字段可选
- 在 SAN 区域添加所有需要覆盖的域名和 IP(每行一个,格式:
DNS:域名或IP:地址) - 点击「生成证书」后可分别复制证书和私钥,或点击「下载证书包」分别下载
.crt和.key文件 - 支持 Ctrl+Enter 快捷键触发生成
注意事项
- 4096 位密钥生成较慢(约 10-30 秒),请耐心等待
- 自签证书仅用于开发测试,严禁用于生产环境(生产环境请使用 Let's Encrypt 或商业 CA)
- 私钥是敏感信息,请妥善保管,不要提交到代码仓库(建议加入
.gitignore) - 所有处理均在浏览器本地完成,私钥不会上传到任何服务器
自签证书与 PKI 知识详解
自签证书 vs CA 签发证书
| 对比项 | 自签证书 | CA 签发证书(Let's Encrypt) | 商业 CA 证书 |
|---|---|---|---|
| 浏览器信任 | ❌ 显示安全警告 | ✅ 自动信任 | ✅ 自动信任 |
| 费用 | 免费 | 免费 | 数百至数千元/年 |
| 有效期 | 自定义(最长 10 年) | 90 天(需自动续签) | 1-2 年 |
| 适用场景 | 本地开发、内网、测试 | 公网域名、生产环境 | 企业生产、EV 证书 |
| 域名要求 | 无(支持 localhost、IP) | 需要公网可访问的域名 | 需要已注册域名 |
X.509 证书主要字段说明
| 字段 | 缩写 | 说明 | 示例 |
|---|---|---|---|
| Common Name | CN |
通用名称,通常是主域名或 IP(必填) | localhost |
| Subject Alternative Name | SAN |
主题备用名称,现代浏览器以此为准(必须包含) | DNS:localhost, IP:127.0.0.1 |
| Organization | O |
组织/公司名称 | My Company Ltd. |
| Organizational Unit | OU |
部门名称 | Engineering |
| Country | C |
国家代码(ISO 3166-1 alpha-2,两位大写字母) | CN |
| State/Province | ST |
省/州 | Beijing |
| Locality | L |
城市 | Beijing |
各平台信任自签证书的方法
Windows
# 方法一:双击 .crt 文件 → 安装证书
# → 选择「本地计算机」→「受信任的根证书颁发机构」
# 方法二:PowerShell(管理员)
Import-Certificate -FilePath cert.crt \
-CertStoreLocation Cert:\LocalMachine\Root
macOS
# 方法一:双击 .crt → 钥匙串访问 → 始终信任
# 方法二:命令行
sudo security add-trusted-cert \
-d -r trustRoot \
-k /Library/Keychains/System.keychain \
cert.crt
Linux(Ubuntu/Debian)
sudo cp cert.crt \
/usr/local/share/ca-certificates/
sudo update-ca-certificates
Docker / Nginx
# nginx.conf
ssl_certificate /etc/ssl/cert.crt;
ssl_certificate_key /etc/ssl/cert.key;
# Dockerfile
COPY cert.crt /etc/ssl/
COPY cert.key /etc/ssl/
openssl 命令速查
生成自签证书(命令行等效)
# 一步生成(2048 位 RSA,365 天)
openssl req -x509 -newkey rsa:2048 \
-keyout cert.key -out cert.crt \
-days 365 -nodes \
-subj "/CN=localhost/O=Dev/C=CN" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
验证与转换
# 查看证书内容
openssl x509 -in cert.crt -text -noout
# 验证私钥与证书匹配
openssl x509 -noout -modulus -in cert.crt | md5sum
openssl rsa -noout -modulus -in cert.key | md5sum
# 转换为 PFX(IIS 使用)
openssl pkcs12 -export -out cert.pfx \
-inkey cert.key -in cert.crt
常见问题与解决方法
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 浏览器显示「您的连接不是私密连接」 | 自签证书未被系统信任 | 将证书导入系统受信任根证书库(见上方各平台方法) |
NET::ERR_CERT_COMMON_NAME_INVALID |
访问的域名/IP 不在 SAN 列表中 | 重新生成证书,在 SAN 中添加对应域名或 IP |
| curl 报 SSL 证书验证失败 | curl 不信任自签证书 | 使用 --cacert cert.crt 指定证书,或临时用 -k 跳过验证 |
Java 应用报 PKIX path building failed |
JVM 信任库不包含自签证书 | keytool -import -alias myca -keystore $JAVA_HOME/lib/security/cacerts -file cert.crt |
| iOS / Android 不信任证书 | 移动端需要手动安装并信任 | iOS:设置 → 通用 → 关于本机 → 证书信任设置;Android:设置 → 安全 → 安装证书 |