第4章 OpenSSL工具入门:安装、常用命令、生成密钥对、查看证书信息
说实话,很多搞证书管理的人一开始都绕不开 OpenSSL。它就像一把瑞士军刀——功能多,但入门有点门槛。我在做安全审计那几年,几乎天天跟它打交道。这一章咱们就把最基础的东西捋清楚:怎么装、怎么用、怎么生成密钥对、怎么查看证书。
4.1 安装OpenSSL
不同系统安装方式不一样,我列几个常见的。你先看看自己环境,挑一个就行。
| 操作系统 | 安装方式 | 验证命令 |
|---|---|---|
| Linux (Debian/Ubuntu) | sudo apt install openssl |
openssl version |
| Linux (RHEL/CentOS) | sudo yum install openssl |
openssl version |
| macOS | 系统自带,或 brew install openssl |
openssl version |
| Windows | 下载安装包(如 Win64 OpenSSL) | openssl version(需配置环境变量) |
小提示:装完之后第一件事就是跑 openssl version。我看到版本号出来,心里才踏实。有一次在 CentOS 上装了半天发现没装全,结果连个证书都解析不了。
4.2 常用命令概览
OpenSSL 命令多,但常用的也就那么几个。我按功能分了类,你记着就行。
- 版本与信息:
openssl version、openssl list -cipher-commands - 密钥生成:
openssl genpkey、openssl genrsa、openssl ecparam -genkey - 证书操作:
openssl req(生成 CSR)、openssl x509(查看/签发) - 查看信息:
openssl x509 -in cert.pem -text -noout - 格式转换:
openssl pkcs12 -export、openssl rsa、openssl pkcs8
你想想看,这些命令就像工具箱里的螺丝刀、扳手。别试图一晚上记完,用的时候查文档就行。
4.3 生成密钥对
密钥对是证书的根基。我现在生成密钥对,习惯用 genpkey 命令,因为它统一支持 RSA、ECC 等多种算法。
4.3.1 生成 RSA 私钥
# 生成 2048 位 RSA 私钥
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.key
4.3.2 生成 ECC 私钥
# 生成 prime256v1 椭圆曲线私钥
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -out ec_private.key
注意:私钥文件默认没有加密。谁拿到这个文件,谁就能冒充你。我建议加上密码保护:加个 -aes256 参数。
4.3.3 从私钥提取公钥
openssl pkey -in private.key -pubout -out public.pem
说到这里,我想起一个坑。有一次我帮客户做证书审计,发现他们用 openssl genrsa 生成的私钥用 PEM 格式,但另一个工具只认 DER 格式。结果折腾了一下午。所以生成之前,先想好下游系统要什么格式。
关键对照表:私钥文件格式
| 格式 | 特点 | 常见后缀 |
|---|---|---|
| PEM (Base64) | 文本可读,有头尾标识 | .pem, .key |
| DER (二进制) | 纯二进制,体积小 | .der, .cer |
| PKCS#8 | 标准私钥格式,支持多种算法 | .p8, .key |
4.4 查看证书信息
证书审计的核心之一就是“看证书”。我个人最喜欢用这条命令:
openssl x509 -in cert.pem -text -noout
这条命令会把证书的几乎所有信息都打印出来:颁发者、使用者、有效期、公钥、签名算法、扩展项……
如果你只想看某个字段,比如有效期:
openssl x509 -in cert.pem -dates -noout
只看主题:
openssl x509 -in cert.pem -subject -noout
查看证书指纹(SHA256):
openssl x509 -in cert.pem -fingerprint -sha256 -noout
实战技巧:我在做审计时,经常需要批量检查几十个证书过期时间。写个脚本循环跑 openssl x509 -in *.pem -enddate -noout | cut -d= -f2,比手动点开浏览器快多了。
还有一种情况是看证书链是否完整。用这条命令就能看到证书链上每一级的信息:
openssl crl2pkcs7 -nocrl -certfile chain.pem | openssl pkcs7 -print_certs -text -noout
嗯,这里要注意:如果是二进制 DER 格式的证书,得先转换一下:
openssl x509 -inform DER -in cert.der -text -noout
我曾经遇到过一个线上事故——服务器证书明明没到期,但客户端报错。排查半天,发现是中间证书过期了,但大家只看服务器证书。所以你查看证书信息时,一定要把整条链都检查一遍。
上面这张图把本章的核心脉络串起来了。你顺着箭头走,就是一套完整的 OpenSSL 入门操作链。装好工具,生成密钥对,再学会查看证书,后面的审计工作才能展开。