3、OpenSSL工具入门:安装、常用命令与密钥对生成

说实话,很多人在接触 mTLS 时,第一个卡住的地方不是证书逻辑,而是 OpenSSL 这个工具本身。我见过不少同事,一打开终端敲 openssl 就懵了——参数太多,文档太厚,不知道从哪下手。

这一章,我就带你把它捋清楚。咱们不追求背命令,而是理解它背后的套路。你想想看,OpenSSL 说白了就是一个瑞士军刀,你只要掌握几个核心动作,后面 90% 的证书操作都能搞定。

3.1 安装 OpenSSL:别在这步翻车

先确认你手头有没有这个工具。我个人习惯在 Linux 或 macOS 上操作,Windows 的话建议用 WSL 或者 Git Bash。

操作系统 安装命令 验证版本
Ubuntu/Debian sudo apt install openssl openssl version
CentOS/RHEL sudo yum install openssl openssl version
macOS (Homebrew) brew install openssl openssl version
Windows (WSL) 在 WSL 中执行 Linux 命令 openssl version
我的小建议:装完后先跑一下 openssl version -a,看看编译参数里有没有 enable-ec。我曾经在一台旧服务器上发现 OpenSSL 没编译 ECC 支持,折腾了半天才发现是工具本身的问题。

3.2 常用命令概览:别被参数吓到

OpenSSL 的命令结构其实很规律。你记住一个公式就行:

openssl <子命令> [选项] [参数]

子命令就是你要做的事情,比如 genrsa、req、x509。我整理了一张速查表,你平时用到的 80% 场景都在这了:

子命令 用途 典型场景
genrsa 生成 RSA 私钥 传统证书、兼容性要求高
ecparam 生成 ECC 参数与私钥 性能优先、移动端场景
req 生成 CSR 或自签名证书 申请证书、测试环境
x509 查看/签发证书 证书内容检查、自签发
verify 验证证书链 部署前检查
s_client 测试 TLS 连接 调试 mTLS 握手

嗯,这里要注意:s_client 是调试 mTLS 的神器,后面章节我会专门讲它。现在你先把前四个命令练熟就行。

3.3 生成 RSA 密钥对:最经典的做法

RSA 是目前兼容性最好的算法。我在项目中遇到过一些老旧系统,只认 RSA,ECC 反而不行。所以 RSA 你得会。

生成一个 2048 位的 RSA 私钥:

openssl genrsa -out server.key 2048

从私钥里提取公钥:

openssl rsa -in server.key -pubout -out server.pub
关键点:私钥文件一定要保护好。我习惯生成后立刻执行 chmod 600 server.key,只允许当前用户读写。曾经有个同事把私钥权限设成 777,结果被 CI 脚本误删了……嗯,血的教训。

如果你想看看私钥里到底存了什么,可以用这个命令:

openssl rsa -in server.key -text -noout

它会打印出模数、指数、素数等细节。平时用不到,但排查问题时很有用。

3.4 生成 ECC 密钥对:更小更快

ECC(椭圆曲线密码学)是现在的趋势。同样的安全强度,ECC 的密钥比 RSA 短得多。比如 256 位的 ECC 相当于 3072 位的 RSA。

生成 ECC 私钥分两步走。先列出支持的曲线:

openssl ecparam -list_curves

我个人最常用的是 prime256v1(也叫 secp256r1),兼容性最好。生成私钥:

openssl ecparam -genkey -name prime256v1 -out ecdsa.key

提取公钥:

openssl ec -in ecdsa.key -pubout -out ecdsa.pub
避坑指南:我曾经在生成 ECC 密钥时忘了指定曲线名称,结果 OpenSSL 用了默认曲线,导致后面证书签发时算法不匹配。所以每次生成 ECC 密钥,我都会用 -name 明确指定曲线,绝不偷懒。

3.5 查看证书内容:别信眼睛,信命令

拿到一个证书文件,怎么知道它里面写了什么?别双击打开看 GUI,那玩意不靠谱。用命令行:

openssl x509 -in certificate.crt -text -noout

这个命令会输出证书的所有字段,包括:

  • Subject:证书持有者信息
  • Issuer:签发者信息
  • 有效期:notBefore 和 notAfter
  • 公钥:算法和密钥长度
  • 扩展项:SAN、Key Usage、Extended Key Usage 等

只看有效期的话,可以精简一点:

openssl x509 -in certificate.crt -dates -noout

只看 Subject 和 Issuer:

openssl x509 -in certificate.crt -subject -issuer -noout
注意:如果证书是 DER 格式(二进制),你得先转成 PEM 才能看。转换命令:openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM。我刚开始做证书时,经常在这上面浪费时间。

3.6 知识体系一览

为了让你对本章内容有个整体印象,我画了一张图。它把 OpenSSL 的核心操作串起来了:

OpenSSL 核心操作流程图 OpenSSL 核心操作流程 安装 OpenSSL 选择算法:RSA / ECC RSA: genrsa -out key 2048 ECC: ecparam -genkey -name prime256v1 提取公钥: rsa/ec -pubout 查看证书: x509 -text -noout 核心原则:私钥不离开安全区,公钥随意分发,证书内容用命令行验证 RSA 兼容性好,ECC 性能更优,根据场景选择

这张图把安装、算法选择、密钥生成、公钥提取、证书查看串成了一条线。你照着这个流程走一遍,OpenSSL 的基本操作就通了。

3.7 本章小结

这一章我们干了三件事:装好 OpenSSL、生成 RSA 和 ECC 密钥对、学会查看证书内容。这些是后面所有 mTLS 操作的基础。你可能会觉得这些命令有点枯燥,但相信我——等你真正开始配置双向认证时,你会发现今天花的时间绝对值。