OpenSSL 工具安装与基本操作归纳总结
做 TLS 改造,OpenSSL 是绕不开的工具。你可能用过,也可能还在纠结选哪个版本。我个人的习惯是:在开发机上统一用一个 LTS 版本,避免因为版本差异导致签名结果对不上。这一节我把安装和常用的几个命令梳理出来,你跟着做一遍基本就熟了。
1. 安装方式速览
不同平台差别不大,但有几个细节得注意。我列个表,你对照自己环境选就行。
| 平台 | 推荐方式 | 典型命令 | 注意事项 |
|---|---|---|---|
| Ubuntu / Debian | apt 安装 | sudo apt install openssl |
版本通常为 1.1.1 或 3.x,建议用 openssl version 确认 |
| CentOS / RHEL | yum 安装 | sudo yum install openssl |
默认可能较旧,可加 EPEL 源升级 |
| macOS | Homebrew | brew install openssl |
系统自带 LibreSSL,别搞混了;我习惯 brew link --force 覆盖 |
| Windows | 官方二进制 / Chocolatey | choco install openssl |
注意选 Light 版还是 Full 版,Full 版带配置文件 |
小提示:我习惯在每台机器上先跑 openssl version -a,看看编译参数。尤其是 OPENSSLDIR 路径,后面找配置文件时很有用。
2. 验证安装与环境
装完之后,别急着开始。先检查一下环境对不对。我见过有人装了 OpenSSL 3.x,但系统 PATH 里还指向旧版,结果命令跑出来的版本不一致。
# 查看版本和编译信息
openssl version -a
# 检查可用的密码套件(部分输出)
openssl ciphers -v | head -20
# 查看帮助(最常用的子命令列表)
openssl help
注意:如果你用 macOS 系统自带的 LibreSSL,openssl version 会显示 “LibreSSL”。它和 OpenSSL 命令行为有细微差别,生成自签名证书时可能报错。我建议你还是用 Homebrew 装正式版 OpenSSL,然后 export PATH="/usr/local/opt/openssl/bin:$PATH" 加到 .zshrc 里。
3. 核心操作:密钥与证书
接下来是日常最常用的几类操作。我会按「生成密钥 → 生成 CSR → 自签名证书 → 查看证书」这个顺序来讲。你想想看,整个 PKI 体系里,最基础的就是这几个步骤。
3.1 生成 RSA 私钥
# 生成 2048 位的 RSA 私钥(推荐)
openssl genrsa -out server.key 2048
# 检查私钥内容
openssl rsa -in server.key -text -noout
我刚开始的时候,图方便用了 1024 位。后来审核要求必须 2048 以上,又重新生成了一遍,耽误了不少时间。
3.2 生成证书签名请求(CSR)
openssl req -new -key server.key -out server.csr
# 如果你想一次性填完字段,可以用 -subj
openssl req -new -key server.key -out server.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=Dev/CN=www.example.com"
专用名词说明:CN(Common Name)就是证书绑定的域名,这个字段现在很多浏览器已经不强制校验了,但内部 PKI 还是会看。我建议 CN 和 SAN 保持一致。
3.3 自签名证书(测试用)
# 直接生成自签名证书,有效期 365 天
openssl req -x509 -newkey rsa:2048 -keyout server.key \
-out server.crt -days 365 -nodes
注意这里的 -nodes 表示私钥不加密。生产环境千万别用这个参数。我曾经犯过傻,把带口令的私钥配到 Nginx 里,结果每次重启都要输密码,后来改成 -aes256 配合密码文件了。
3.4 查看证书信息
# 查看证书的文本详情
openssl x509 -in server.crt -text -noout
# 只检查有效期
openssl x509 -in server.crt -dates -noout
# 查看 CSR 内容
openssl req -in server.csr -text -noout
4. 常用操作速查表
下面这张表我建议你截图或者抄下来。平时配 TLS 改造,翻来覆去就是这几个命令。
| 用途 | 命令示例 | 常见输出文件 |
|---|---|---|
| 生成 RSA 私钥 | openssl genrsa -out key.pem 2048 |
key.pem |
| 生成 ECDSA 私钥(推荐) | openssl ecparam -genkey -name prime256v1 -out eckey.pem |
eckey.pem |
| 生成 CSR | openssl req -new -key key.pem -out csr.pem |
csr.pem |
| 自签名证书 | openssl req -x509 -key key.pem -out cert.pem -days 365 |
cert.pem |
| 查看证书 | openssl x509 -in cert.pem -text -noout |
终端输出 |
| 验证证书链 | openssl verify -CAfile ca.pem cert.pem |
终端提示 OK 或错误 |
| 转换格式(DER ↔ PEM) | openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM |
cert.pem |
5. OpenSSL 操作流程总览
我把上面这些步骤串成一张图,你一看就明白整体脉络了。
6. 避坑指南(我踩过的雷)
- 版本陷阱:我曾经用 Ubuntu 18.04 自带的 OpenSSL 1.1.0 生成密钥,拿到 CentOS 7 上解析不成功——因为老版本不支持某些扩展。后来我统一用 1.1.1 以上版本,就没出过问题。
- 私钥权限:有次我把私钥权限设成 777,结果安全审计直接亮红灯。现在一律
chmod 600 server.key。 - CSR 的 CN 与 SAN:早期我只填了 CN,结果浏览器提示“证书名称不匹配”。后来我改用
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"加 SAN 字段,问题解决。 - 自签名证书过期:有一次测试环境证书过期了,排查半天才发现是
-days只设了 30 天。我建议测试证书也至少设 365 天,避免频繁更换。
总结一下:OpenSSL 的安装不难,但版本、路径、命令参数这些细节决定了你后面会不会掉坑。先把私钥生成和证书查看两个命令记熟,然后逐步扩展。嗯,到这块儿为止,TLS 改造的钥匙你已经拿到手里了。