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 操作流程总览

我把上面这些步骤串成一张图,你一看就明白整体脉络了。

OpenSSL 密钥与证书操作流程 1. 生成私钥 2. 生成 CSR 3a. 自签名证书 3b. 提交 CA 签发 4. 查看证书详情 5. 验证证书链 6. 配置到 TLS

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 改造的钥匙你已经拿到手里了。