21个OpenSSL示例,帮助您在现实世界中使用
使用OpenSSL创建、管理和转换SSL证书
OpenSSL是SSL中最受欢迎的命令之一,用于创建、转换和管理证书。
在许多情况下,您都需要以各种方式处理OpenSSL,因此我在这里为您列出了一个便捷的备忘单。
本文将介绍在实际应用中经常使用的OpenSSL命令,以帮助您。
一些与证书相关的缩写词。
- SSL – 安全套接字层
- CSR – 证书签名请求
- TLS – 传输层安全性
- PEM – 隐私增强邮件
- DER – Distinguished Encoding Rules
- SHA – 安全散列算法
- PKCS – 公钥密码学标准
注意: 如果您对这些术语不熟悉,SSL/TLS operation course可能会对您有所帮助。
创建新的私钥和证书签名请求
openssl req -out yaoweibin.csr -newkey rsa:2048 -nodes -keyout yaoweibin.key
上述命令将生成CSR和一个2048位RSA密钥文件。如果您打算在Apache或Nginx中使用此证书,则需要将此CSR文件发送给证书颁发机构,他们将为您提供一个签名的证书,通常以der
或pem
格式,您需要在Apache或Nginxweb服务器中进行配置。
创建自签名证书
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 yaoweibin.csr
验证非常重要,以确保您正在向颁发机构发送具有所需详细信息的CSR。
创建RSA私钥
openssl genrsa -out private.key 2048
如果您只需要生成RSA私钥,可以使用上述命令。我已经包含了2048用于更强的加密。
从密钥中删除密码
openssl rsa -in certkey.key -out nopassphrase.key
如果您在密钥文件中使用密码并且使用Apache,则每次启动时都必须输入密码。如果您厌烦输入密码,那么您可以使用上述的openssl rsa -in yaoweibin.key -check来从现有密钥中删除密码。
验证私钥
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
如果您希望在Apache中使用现有的pkcs12格式或仅使用pem格式,这将非常有用。
测试特定URL的SSL证书
openssl s_client -connect yoururl.com:443 –showcerts
我经常使用这个命令来验证服务器上特定URL的SSL证书。这非常方便,可以验证协议、密码和证书详细信息。
查找OpenSSL版本
openssl version
如果您负责确保OpenSSL安全性,那么您可能首要要做的是验证版本。
检查PEM文件证书的过期日期
openssl x509 -noout -in certificate.pem -dates
如果您计划进行一些监控以检查证书的有效性,这将非常有用。它将以notBefore和notAfter语法显示日期。您将需要验证notAfter以确认证书是否过期或仍然有效。
例如:
[root@Chandan opt]# openssl x509 -noout -in bestflare.pem -dates notBefore=Jul 4 14:02:45 2015 GMT notAfter=Aug 4 09:46:42 2015 GMT [root@Chandan opt]#
检查SSL URL的证书过期日期
openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate
如果您计划远程监视SSL证书的过期日期或特定URL,这将非常有用。
例如:
[root@Chandan 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
如果您需要验证SSL V2/V3是否已启用,您可以使用上述命令。如果已激活,您将获得“CONNECTED”,否则为“handshake failure”。
验证特定密码是否在URL上被接受
openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443
如果您正在处理安全问题和渗透测试结果显示接受了一些弱密码,则可以使用上述命令进行验证。
当然,您需要更改密码和URL,以便进行测试。如果接受了提到的密码,那么您将会收到“已连接”,否则为“握手失败”。
我希望上述命令可以帮助您更多了解如何使用OpenSSL来管理您网站的SSL certificates。