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
-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
openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM。我刚开始做证书时,经常在这上面浪费时间。
3.6 知识体系一览
为了让你对本章内容有个整体印象,我画了一张图。它把 OpenSSL 的核心操作串起来了:
这张图把安装、算法选择、密钥生成、公钥提取、证书查看串成了一条线。你照着这个流程走一遍,OpenSSL 的基本操作就通了。
3.7 本章小结
这一章我们干了三件事:装好 OpenSSL、生成 RSA 和 ECC 密钥对、学会查看证书内容。这些是后面所有 mTLS 操作的基础。你可能会觉得这些命令有点枯燥,但相信我——等你真正开始配置双向认证时,你会发现今天花的时间绝对值。