此工具用于颁发泛域名证书,方便开发环境调试。现已升级为功能全面的SSL证书管理工具。
请勿用于生产环境,生产环境还是购买正式的证书。
或者到 Let's Encrypt 可以申请到免费证书
(支持多域名和泛域名)。
- 多算法支持:RSA、ECC/ECDSA、Ed25519
- 多格式输出:PEM、DER、PKCS#8、PKCS#12、JKS
- 证书管理工具:查看、验证、检查过期时间
- 自动续期功能:配置定时任务,自动检查和续期
- 多平台安装:自动在Linux、macOS、Windows安装证书
- 增强日志系统:彩色输出、多级别日志、错误处理
- 灵活的参数传递:支持
--domain、--domains、--ip、--ips等多种方式
# 基础用法(已增强)
./gen.cert.sh -v example.dev cdn.example.dev
# 使用新的参数格式
./gen.cert.sh --domain example.dev --domain cdn.example.dev
# 使用 --domains 和 --ips 参数
./gen.cert.sh --domains example.com,test.com --ips 192.168.1.100,127.0.0.1
# 纯IP地址证书
./gen.cert.sh --ip 127.0.0.1 --ips 192.168.1.1,10.0.0.1
# 使用ECC算法
./gen-cert-advanced.sh --ecc prime256v1 --jks example.dev
# 查看证书信息
./cert-info.sh -i example.dev -f
# 自动续期
./cert-renew.sh -a
# 自动安装根证书
sudo ./install-cert.sh --system- 你可以创建任意网站证书,只需导入一次根证书,无需多次导入;
- 减少重复又无谓的组织信息输入,创建证书时只需要输入域名;
- 泛域名证书可以减少
nginx配置,例如你要模拟 CDN:
假设你的项目网站是example.dev,CDN 网站设置为cdn.example.dev,
你只需在nginx里面配置一个网站,server_name同时填写example.dev
和cdn.example.dev,它们可以使用同一个*.example.dev的证书。 - 现在你只需要一个证书,就可以搞定所有项目网站!
使用 SAN 来支持多域名和泛域名:
subjectAltName=DNS:*.one.dev,DNS:one.dev,DNS:*.two.dev,DNS:two.dev,DNS:*.three.dev,DNS:three.dev- Linux、macOS 或 Windows (WSL/Git Bash),openssl
- 事先用
hosts或者dnsmasq解析你本地开发的域名,
例如把example.dev指向127.0.0.1
# 生成证书(已增强,支持彩色输出和错误处理)
./gen.cert.sh example.dev
# 使用 --domain 参数(推荐)
./gen.cert.sh --domain example.dev --domain cdn.example.dev
# 使用 --domains 和 --ips 参数(逗号分隔)
./gen.cert.sh --domains example.com,test.com --ips 192.168.1.100,127.0.0.1
# 多域名(旧格式仍支持)
./gen.cert.sh example.dev cdn.example.dev api.example.dev
# 使用自定义密码
./gen.cert.sh -p mypassword example.dev# 使用ECC算法(性能更好)
./gen-cert-advanced.sh --ecc prime256v1 example.dev
# 生成Java KeyStore
./gen-cert-advanced.sh --jks example.dev
# 包含IP地址(使用高级脚本)
./gen-cert-advanced.sh --ip 127.0.0.1 example.dev
# 纯IP地址证书(无域名)
./gen.cert.sh --ip 127.0.0.1 --ips 192.168.1.1,10.0.0.1
# 混合域名和IP
./gen.cert.sh --domain example.com --ip 127.0.0.1 --ips 192.168.1.100# 查看证书信息
./cert-info.sh -i example.dev
# 检查过期时间
./cert-info.sh -e example.dev -w 30
# 自动安装根证书
sudo ./install-cert.sh --system
# 设置自动续期
./cert-renew.sh -a
./cert-renew.sh -s '0 2 * * *' # 每天2点检查# 新的推荐用法(更清晰明确)
./gen.cert.sh --domain <domain> [--domain <domain2>] ...
./gen.cert.sh --domains <domain1>,<domain2> [--ips <ip1>,<ip2>]
./gen.cert.sh --ip <ip> [--ip <ip2>] ...
./gen.cert.sh --ips <ip1>,<ip2> [--domains <domain1>,<domain2>]
# 旧格式(仍然支持)
./gen.cert.sh <domain> [<domain2>] [<domain3>] ...--domain <域名>- 添加单个域名,支持泛域名--domains <域名>- 多个域名,逗号分隔,如example.com,test.com--ip <IP地址>- 添加单个IP地址到证书--ips <IP地址>- 多个IP地址,逗号分隔,如192.168.1.100,127.0.0.1-v, --verbose- 显示详细日志-p, --password <密码>- 指定PFX文件密码(默认:123456)-a, --algorithm <算法>- 指定密钥算法(默认:rsa:4096)
# 单域名
./gen.cert.sh --domain example.dev
# 多域名(逗号分隔)
./gen.cert.sh --domains example.com,test.com,api.com
# 混合域名和IP
./gen.cert.sh --domain example.com --ip 127.0.0.1 --ips 192.168.1.100
# 纯IP地址证书
./gen.cert.sh --ip 192.168.1.100 --ips 10.0.0.1,172.16.0.1把 <domain> 替换成你的域名,例如 example.dev。证书将自动包含泛域名(如 *.example.dev)和主域名。
如果同时需要域名和IP地址,可以使用上述所有参数的任意组合。
生成的证书位于:
out/<domain>/<domain>.crt # 证书文件
out/<domain>/<domain>.bundle.crt # 证书链(包含根证书)
out/<domain>/<domain>.key.pem # 私钥文件
out/<domain>/<domain>.pfx # PKCS#12格式(含密码)
注意:
- 如果只有IP地址没有域名,目录名将使用IP地址(点替换为下划线),如
out/127_0_0_1/ - 每次生成都会创建时间戳目录,如
20250906-2138/,保留历史版本 - 符号链接会自动创建,指向最新版本的文件
证书有效期是 2 年,你可以修改 ca.cnf 来修改这个年限。
根证书位于:
out/root.crt
成功之后,使用 install-cert.sh 自动安装到操作系统信任这个证书。
根证书的有效期是 20 年,你可以修改 gen.root.sh 来修改这个年限。
证书私钥位于:
out/cert.key.pem
其中 <domain>.bundle.crt 是已经拼接好 CA 的证书,可以添加到 nginx 配置里面。
然后你就可以愉快地用 https 来访问你本地的开发网站了。
你可以运行 flush.sh 来清空所有历史,包括根证书和网站证书。
你可以修改 ca.cnf 来修改你的证书年限。
default_days = 7300可以修改 gen.root.sh 来自定义你的根证书名称和组织。
也可以修改 gen.cert.sh 来自定义你的网站证书组织。
- 使用示例 - 详细的用法示例和场景
- Chrome 信任证书问题 - Chrome浏览器信任证书指南
Vault and self signed SSL certificates
Provide subjectAltName to openssl directly on command line
官方客户端 certbot 太复杂了,推荐使用 acme.sh。
Chrome to force .dev domains to HTTPS via preloaded HSTS (2017-9-16)
看到有人反映 Chrome 下无法信任证书,可参考 这个文档