利用 OpenSSL 工具进行 SSL 证书的创建、管理和转换
在处理 SSL 证书时,OpenSSL 是一个非常受欢迎的命令行工具,它能够执行创建、转换和管理等多种操作。
在实际应用中,您可能会遇到各种需要使用 OpenSSL 的情况。为了方便大家参考,我将一些常用的 OpenSSL 命令整理成了一个备忘单。
本文将详细介绍这些常用的 OpenSSL 命令,希望能帮助您在实际工作中更加熟练地运用它们。
首先,让我们了解一些与证书相关的缩写词:
- SSL – 安全套接字层
- CSR – 证书签名请求
- TLS – 传输层安全
- PEM – 隐私增强邮件
- DER – 可分辨编码规则
- SHA – 安全散列算法
- PKCS – 公钥加密标准
温馨提示:如果您对这些术语不太熟悉,建议先学习一下 SSL/TLS 操作教程,这将有助于您更好地理解后续内容。
生成新的私钥和证书签名请求
openssl req -out techblik.com.csr -newkey rsa:2048 -nodes -keyout techblik.com.key
上述命令将生成一个 CSR 文件和一个 2048 位的 RSA 密钥文件。如果您计划在 Apache 或 Nginx 服务器上使用此证书,则需要将此 CSR 文件发送给证书颁发机构。他们会为您签发一个签名证书(通常为 der 或 pem 格式),然后您需要在 Apache 或 Nginx 服务器上配置该证书。
创建自签名证书
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
此命令用于生成自签名证书和一个 2048 位的 RSA 密钥文件。 我添加了 sha256,因为它是目前被认为最安全的散列算法。
温馨提示:默认情况下,生成的自签名证书有效期只有一个月,您可以使用 -days 参数来延长证书的有效期。
例如,要创建一个有效期为两年的自签名证书:
openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem
验证 CSR 文件
openssl req -noout -text -in techblik.com.csr
验证 CSR 文件至关重要,它可以确保您发送给证书颁发机构的 CSR 包含了所有必需的详细信息。
生成 RSA 私钥
openssl genrsa -out private.key 2048
如果您只需要生成 RSA 私钥,可以使用上述命令。 我选择了 2048 位,以获得更强的加密效果。
移除密钥中的密码
openssl rsa -in certkey.key -out nopassphrase.key
如果您的密钥文件设置了密码,并且您在使用 Apache 服务器,那么每次启动 Apache 时都需要输入密码。 如果您觉得输入密码很麻烦,可以使用此命令从现有密钥中删除密码。
验证私钥
openssl rsa -in certkey.key –check
如果您怀疑密钥文件有问题,可以使用此命令进行检查。
验证证书文件
openssl x509 -in certfile.pem -text –noout
如果您想要查看证书的 CN、OU 等信息,可以使用上述命令。 它会为您提供证书的详细信息。
验证证书颁发者
openssl x509 -in certfile.pem -noout -issuer -issuer_hash
证书颁发机构会对每个证书进行签名,如果您需要验证颁发者,可以使用此命令。
检查证书的哈希值
openssl x509 -noout -hash -in bestflare.pem
将 DER 格式转换为 PEM 格式
openssl x509 –inform der –in sslcert.der –out sslcert.pem
通常,证书颁发机构会提供 .der 格式的 SSL 证书。如果您需要在 Apache 或其他需要 .pem 格式的场景中使用它们,可以使用此命令进行转换。
将 PEM 格式转换为 DER 格式
openssl x509 –outform der –in sslcert.pem –out sslcert.der
如果您需要将 .pem 格式的证书转换为 .der 格式,可以使用此命令。
将证书和私钥转换为 PKCS#12 格式
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem
如果您需要在 Java 应用程序或其他只接受 PKCS#12 格式的应用程序中使用证书,可以使用此命令。 它将生成一个包含证书和密钥文件的单个 pfx 文件。
温馨提示:您可以使用 –chain 参数来包含链证书,如下所示:
openssl pkcs12 –export –out sslcert.pfx –inkey key.pem –in sslcert.pem -chain cacert.pem
使用现有私钥创建 CSR
openssl req –out certificate.csr –key existing.key –new
如果您不想生成新的私钥,而是想使用现有的私钥,可以使用此命令。
查看 PKCS12 格式证书的内容
openssl pkcs12 –info –nodes –in cert.p12
PKCS12 是一种二进制格式,您无法直接在文本编辑器中查看其内容。 此命令可以帮助您查看 PKCS12 文件的内容。
将 PKCS12 格式转换为 PEM 格式
openssl pkcs12 –in cert.p12 –out cert.pem
如果您希望将现有的 pkcs12 格式的证书与 Apache 一起使用,或者只需要 pem 格式的证书,此命令会很有帮助。
测试指定 URL 的 SSL 证书
openssl s_client -connect yoururl.com:443 –showcerts
我经常使用此命令来验证来自服务器的特定 URL 的 SSL 证书。 这对于验证协议、密码和证书详细信息非常方便。
查询 OpenSSL 版本
openssl version
如果您负责维护 OpenSSL 的安全,那么首先要做的就是验证 OpenSSL 的版本。
检查 PEM 文件证书的到期日期
openssl x509 -noout -in certificate.pem -dates
如果您需要监控证书的有效性,此命令会非常有用。 它将以 notBefore 和 notAfter 格式显示日期。 notAfter 是您必须验证的,以确认证书是否已过期或仍然有效。
示例:
[[email protected] opt]# openssl x509 -noout -in bestflare.pem -dates notBefore=Jul 4 14:02:45 2015 GMT notAfter=Aug 4 09:46:42 2015 GMT [[email protected] opt]#
检查 SSL URL 的证书到期日期
openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate
如果您需要远程监控特定 URL 的 SSL 证书到期日期,此命令也很有用。
示例:
[[email protected] opt]# openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate notAfter=Dec 8 00:00:00 2015 GMT
检查 URL 是否支持 SSL V2 或 V3
检查 SSL V2:
openssl s_client -connect secureurl.com:443 -ssl2
检查 SSL V3:
openssl s_client -connect secureurl.com:443 –ssl3
检查 TLS 1.0:
openssl s_client -connect secureurl.com:443 –tls1
检查 TLS 1.1:
openssl s_client -connect secureurl.com:443 –tls1_1
检查 TLS 1.2:
openssl s_client -connect secureurl.com:443 –tls1_2
如果您正在保护 Web 服务器,并且需要验证是否启用了 SSL V2/V3,可以使用上述命令。 如果激活,您将获得“CONNECTED”或“握手失败”的结果。
验证特定密码是否在 URL 上被接受
openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443
如果您正在进行安全审计,并且渗透测试结果显示接受了一些弱密码,您可以使用上述命令进行验证。
当然,您必须根据实际情况更改要测试的密码和 URL。 如果指定的密码被接受,您将获得“已连接”的结果,否则将获得“握手失败”的结果。
希望以上这些命令可以帮助您更好地了解和利用 OpenSSL 管理您网站的 SSL 证书。