OpenSSL 是 SSL/TLS 协议的开源实现,也是安全领域最常用的工具箱。本文整理日常最常用的 OpenSSL 命令,聚焦实用场景。
基础信息#
查看版本#
输出示例:
1
|
OpenSSL 3.0.18 30 Sep 2025
|
查看详细编译信息#
证书操作#
生成私钥#
1
2
3
4
5
|
# 生成 2048 位 RSA 私钥
openssl genrsa -out private.key 2048
# 生成 4096 位 RSA 私钥
openssl genrsa -out private.key 4096
|
从私钥提取公钥#
1
|
openssl rsa -in private.key -pubout -out public.key
|
生成自签名证书#
1
|
openssl req -x509 -new -nodes -key private.key -sha256 -days 365 -out cert.pem -subj "/CN=example.com"
|
查看 PEM 证书信息#
1
|
openssl x509 -in cert.pem -text -noout
|
验证证书和私钥是否匹配#
1
2
3
|
# 比较公钥 modulus
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in private.key | openssl md5
|
两值相同则匹配。
CSR 操作#
生成 CSR#
1
|
openssl req -new -key private.key -out request.csr -subj "/CN=example.com/O=MyOrg/C=CN"
|
查看 CSR 内容#
1
|
openssl req -in request.csr -text -noout
|
用 CSR 签发证书#
1
2
|
# 使用 CA 私钥签发
openssl x509 -req -in request.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cert.pem -days 365 -sha256
|
格式转换#
PEM 转 DER#
1
|
openssl x509 -in cert.pem -outform DER -out cert.der
|
DER 转 PEM#
1
|
openssl x509 -in cert.der -inform DER -out cert.pem
|
PKCS12 打包#
1
2
|
# 将证书和私钥打包为 P12
openssl pkcs12 -export -in cert.pem -inkey private.key -out bundle.p12 -name "mycert"
|
PKCS12 解包#
1
|
openssl pkcs12 -in bundle.p12 -out all.pem -nodes
|
测试连接#
测试 HTTPS 连接#
1
|
openssl s_client -connect www.google.com:443
|
指定 TLS 版本#
1
2
3
4
5
|
# TLS 1.2
openssl s_client -connect www.google.com:443 -tls1_2
# TLS 1.3
openssl s_client -connect www.google.com:443 -tls1_3
|
查看证书链#
1
|
openssl s_client -connect www.google.com:443 -showcerts 2>/dev/null | openssl x509 -text -noout
|
哈希计算#
计算文件哈希#
1
2
3
4
5
6
7
8
|
# SHA256
openssl dgst -sha256 file.txt
# SHA1(不推荐用于安全场景)
openssl dgst -sha1 file.txt
# MD5(仅用于校验,不用于安全)
openssl dgst -md5 file.txt
|
实际输出:
1
2
|
$ echo "test data" | openssl dgst -sha256
SHA2-256(stdin)= 0c15e883dee85bb2f3540a47ec58f617a2547117f9096417ba5422268029f501
|
随机数生成#
生成随机字节#
1
2
3
4
5
|
# 16 字节十六进制
openssl rand -hex 16
# 32 字节 Base64
openssl rand -base64 32
|
实际输出:
1
2
|
$ openssl rand -hex 16
e52575f4e16e338e080e6a222e1a156a
|
密码套件#
列出所有密码套件#
列出 TLS 1.3 密码套件#
1
|
openssl ciphers -v -ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384
|
本文整理了 OpenSSL 最常用的命令,覆盖:
| 类别 |
命令 |
| 信息查看 |
version, version -a |
| 密钥操作 |
genrsa, rsa |
| 证书操作 |
req, x509 |
| 格式转换 |
pkcs12, DER/PEM |
| 连接测试 |
s_client |
| 哈希计算 |
dgst |
| 随机数 |
rand |
参考资料#