总结摘要
OpenSSL.sh 是一个用于生成自签名 SSL 证书的 Shell 脚本,支持自定义域名、IP 地址、加密位数等参数,可创建 CA 证书和服务端证书,适用于测试环境和内部服务。
脚本功能
OpenSSL.sh 是一个功能完整的自签名 SSL 证书生成脚本,使用 OpenSSL工具创建CA证书和服务端SSL证书。支持多域名、多 IP 地址的扩展证书生成,适用于测试环境、开发环境和内部服务。
核心特性:
- 自动生成 CA(证书颁发机构)证书
- 生成服务端 SSL 证书并由 CA 签名
- 支持多域名和多 IP 地址的 SAN(主题备用名称)扩展
- 自定义加密位数(默认 2048 位)
- 灵活的证书有效期设置
- 支持 CA 证书和密钥的复用与重新创建
- 自动输出 YAML格式证书内容便于复制
- 生成标准命名的 tls.key和tls.crt文件
脚本依赖
系统工具依赖
openssl:OpenSSL工具包(核心依赖)bash:脚本运行环境cat、sed、echo:基础文本处理工具
可选工具
vim或其他编辑器:用于手动编辑 openssl.cnf配置文件
环境变量依赖
内置变量说明
脚本通过命令行参数传递配置,无需预设环境变量。主要参数包括:
| |
脚本内部默认配置
| |
参数用法
使用方法
快速安装与使用
下载脚本:
1 2 3 4 5# 使用主下载地址 bash <(curl -sL sc.eli1.top) OpenSSL download # 或使用备用地址 bash <(curl -sL download.elisky.cn) OpenSSL download赋予执行权限:
生成基础 SSL 证书:
1./OpenSSL.sh --ssl-domain=www.test.com生成完整配置的 SSL 证书:
1 2 3 4 5./OpenSSL.sh --ssl-domain=www.test.com \ --ssl-trusted-domain=www.test2.com,api.test.com \ --ssl-trusted-ip=192.168.1.1,10.0.0.1 \ --ssl-size=2048 \ --ssl-date=3650
典型使用场景示例
场景 1:为 Kubernetes Ingress生成自签名证书
| |
场景 2:为本地开发环境生成 HTTPS 证书
| |
场景 3:复用现有 CA 证书签发新证书
| |
场景 4:更新即将过期的 SSL 证书
| |
场景 5:完全重新创建 CA 和证书
| |
场景 6:生成高安全性证书
| |
生成的文件说明
脚本执行后会生成以下文件:
| |
证书文件用途
- tls.key + tls.crt:直接用于 Nginx、Apache等Web服务器配置
- cakey.pem + cacerts.pem:用于签署其他服务端证书
- www.test.com.crt :未附加 CA 证书的纯服务端证书
实际应用场景
- Kubernetes集群:为Ingress Controller生成自签名TLS证书,支持HTTPS访问
- 本地开发环境:为localhost或自定义开发域名启用HTTPS,模拟生产环境
- 内部服务部署:为企业内网服务、测试环境、预发布环境生成证书
- 微服务架构:为服务间通信(mTLS)生成证书
- 数据库加密连接:为MySQL、PostgreSQL等数据库生成SSL证书
- API网关:为 Kong、Traefik等API网关生成证书
- 证书颁发测试:测试 PKI体系、验证证书链配置
- DevOps自动化:集成到 CI/CD流程中自动生成测试证书
注意事项
安全性警告
自签名证书的限制:
- 自签名证书不被公共浏览器信任,会产生安全警告
- 仅适用于测试、开发和内部环境
- 生产环境应使用公共CA签发的证书(如 Let’s Encrypt)
CA 私钥保护:
cakey.pem文件必须严格保密,建议设置权限为 600- 不要将 CA 私钥提交到代码仓库
- 考虑使用密码保护 CA 私钥(本脚本不支持,需手动实现)
证书信任配置
- 客户端信任设置:
1 2 3 4 5 6 7 8 9 10 11 12 13# Linux(Ubuntu/Debian) sudo cp cacerts.pem /usr/local/share/ca-certificates/ sudo update-ca-certificates # CentOS/RHEL sudo cp cacerts.pem /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust # macOS sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain cacerts.pem # Windows # 双击 cacerts.pem -> 安装证书 -> 选择"受信任的根证书颁发机构"
证书有效期管理
- CA 证书:默认 10 年,建议设置为 5-10 年
- 服务端证书:
- 测试环境:365-730 天
- 生产环境(自签名):建议不超过 1 年,定期更新
- Let’s Encrypt证书:90 天(自动续期)
多域名和 IP配置
SAN 扩展限制:
- 确保证书包含所有需要的域名和 IP
- 域名数量没有硬性限制,但过多可能影响性能
- IPv4和IPv6地址都可以添加
通配符证书:
1 2 3# 生成通配符证书 ./OpenSSL.sh --ssl-domain=*.example.com \ --ssl-trusted-domain=example.com
文件管理
备份策略:
1 2 3 4# 备份 CA 证书和私钥 mkdir -p ~/ca-backup cp cakey.pem cacerts.pem ~/ca-backup/ chmod 700 ~/ca-backup版本控制:
- 不要将
.key私钥文件提交到 Git - 可以将
.crt证书文件和openssl.cnf配置文件纳入版本控制
- 不要将
常见问题排查
问题 1:证书不被信任
| |
问题 2:域名不匹配
| |
问题 3:证书过期
| |
最佳实践
- 建立证书清单:记录所有生成的证书、用途、到期时间
- 定期轮换:即使证书未过期,也建议定期更换(如每年)
- 权限控制:私钥文件权限设置为 600,目录权限 700
- 审计日志:记录证书生成时间、参数、操作人员
- 应急预案:准备证书泄露或丢失时的应急流程






















