Linux教程网

总结openssl常见用法

通过这几篇 openssl 签发证书的学习和实践,相信你一定能感受到 openssl 命令行的强大。它还有很多其它强大的功能,待我们取学习和发掘。本文的目标是总结 openssl 关于证书的常见操作和使用方法。

证书格式转换

1. CER 格式转换为 DER

我们知道 DER 就是原始二进制格式,CER 格式其实就是 DER 经过 Base64 编码后的格式。

1
cat cert.cer | base64 -d > cert.der

2. DER 格式转换为 CER

1
base64 cert.der > cert.cer

3. DER 格式转换为 PEM

1
2
3
openssl x509 -inform der -in cert.der -out cert.pem
# cat server.cer | base64 -d > server.der
# 有时候拿到的是 cer 格式,需要解码 base64 即可

4. PEM 格式转换为 DER

1
openssl x509 -outform der -in cert.pem -out cert.der

5. PEM 格式转换为 PFX

1
openssl pkcs12 -export -in client.pem -inkey client.key -out client.pfx

6. PFX 格式转换为 PEM

仅导出证书

1
2
openssl pkcs12 -in cert.pfx -nokeys -out cert.pem  # 不带密码
openssl pkcs12 -in cert.pfx -nokeys -passin pass:123456 -out cert.pem

仅导出私钥

1
2
3
4
5
6
# pfx 本身不带密码,导出不带密码的密钥
openssl pkcs12 -in cert.pfx -nocerts -nodes -out cert.key
# pfx 本身不带密码,导出带密码的密钥
openssl pkcs12 -in cert.pfx -nocerts -passout pass:123123 -out cert.key
# pfx 本身带密码,导出带密码的密钥
openssl pkcs12 -in cert.pfx -nocerts -passin pass:123 -passout pass:123 -out cert.key

同时导出证书和密钥

1
openssl pkcs12 -in cert.pfx -passin pass:123 -out all.pem -nodes

7. PKCS8 私钥格式转换为 ECDSA PKCS1 格式

1
openssl ec -in p8.key -out p1.key

证书内容查看

  • 查看证书内容
1
openssl x509 -noout -text -in server.pem
  • 查看证书签名请求
1
openssl req -noout -text -in server.csr
  • 查看私钥文件内容
1
2
3
openssl pkey -noout -text -in server.key
openssl rsa -noout -text -in server.key
openssl ec -noout -text -in server.key

证书验证

  • 验证证书与证书链是否匹配
1
2
3
4
# 1.将根证书和中间证书转换为pem格式
# 2.根证书和中间证书合并到一个文件
# 3.注意顺序:根证书在最下边
openssl verify -CAfile caChain.pem server.pem
  • 验证证书和私钥文件是否匹配
1
2
3
4
# 从证书中读取公钥内容
openssl x509 -noout -pubkey -in server.pem
# 从私钥中读取公钥内容
openssl pkey -pubout -in server.key

HTTPS访问与测试

  • 模拟客户端连接 HTTPS 网站
1
openssl s_client -connect demo.com:443
  • 模拟 HTTPS 服务
1
2
3
4
5
6
openssl s_server -accept 443 -key server.key -cert server.pem \
-www -debug -msg -CAfile certChain.pem -Verify 3

# 1. -CAfile 指定证书链,配合 -Verify 选项,可以用于验证客户端证书
# 2. -www 选项,模拟 https 服务器,返回 tls 连接相关的内容
# 3. -key、-cert 指定服务器站点证书
  • 查看线上某网站的证书链
1
openssl s_client -quiet -connect demo.com:443
  • 查看线上某网站的证书内容
1
openssl s_client -showcerts -connect demo.com:443
  • 测试网站是否支持 http2
1
openssl s_client -alpn h2 -servername demo.com -connect demo.com:443 | grep -i alpn
  • 测试 SessionCache 复用
1
2
openssl s_client -connect demo.com:443 -tls1_2 -sess_out sess.pem -no_ticket
openssl s_client -connect demo.com:443 -tls1_2 -sess_in sess.pem -no_ticket

还有一种方式可以测试请求是否复用 Session

1
openssl s_client -connect demo.com:443 2>&1 -reconnect  | grep -E "New|Reuse"

如果要测试 Ticket 复用,命令跟 Session Cache 测试一样,去掉 -no_ticket 即可

  • 配合 echo 命令发送自定义的 http 请求
1
2
echo -e "GET / HTTP/1.1\r\nHost: demo.com\r\nConnection: Close\r\n" | \
openssl s_client -ign_eof -connect demo.com:443 -tls1_2 -no_ticket

专题:

本文发表于 2023-09-02,最后修改于 2024-11-02。

本站永久域名「 golinuxblog.com 」,也可搜索「 Linux教程网 」找到我。


上一篇 « 公钥密码标准PKCS系列 下一篇 » 用tmux提升你的命令行体验

推荐阅读

Big Image