前言

OpenSSL 是 SSL/TLS 协议的开源实现,也是安全领域最常用的工具箱。本文整理日常最常用的 OpenSSL 命令,聚焦实用场景。

基础信息

查看版本

1
openssl version

输出示例:

1
OpenSSL 3.0.18 30 Sep 2025

查看详细编译信息

1
openssl version -a

证书操作

生成私钥

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

密码套件

列出所有密码套件

1
openssl ciphers -v

列出 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

参考资料