最常见的OpenSSL命令

8次阅读

共计 3312 个字符,预计需要花费 9 分钟才能阅读完成。

https://www.sslshopper.com/ar…

最通用的 SSL 工具之一是 OpenSSL,它是 SSL 协议的开源实现。几乎每个平台都有 OpenSSL 版本,包括 Windows,Linux 和 Mac OS X.OpenSSL 通常用于为许多不同平台(包括 Apache)创建 CSR 和私钥。但是,它还有数百种不同的功能,允许您查看 CSR 或证书的详细信息,比较证书的 MD5 哈希和私钥(以确保它们匹配),验证证书是否在任何网站上正确安装,并将证书转换为其他格式。可以在此处找到 OpenSSL for Windows 的编译版本。

如果您不想打扰 OpenSSL,可以使用我们的 SSL 证书工具执行许多相同的操作。下面,我们列出了最常见的 OpenSSL 命令及其用法:

常规 OpenSSL 命令

这些命令允许您生成 CSR,证书,私钥以及执行其他其他任务。

Base64 编解码

编码:

 echo "我是一片云 天空是我家 \n 朝迎旭日升 暮送夕阳下" | openssl enc -base64

输出:

5oiR5piv5LiA54mH5LqRIOWkqeepuuaYr+aIkeWutlxu5pyd6L+O5pet5pel5Y2H

44CA5pqu6YCB5aSV6Ziz5LiLCg==

对上面的字符串解码

 echo '5oiR5piv5LiA54mH5LqRIOWkqeepuuaYr+aIkeWutlxu5pyd6L+O5pet5pel5Y2H

44CA5pqu6YCB5aSV6Ziz5LiLCg==’ |openssl enc -base64 -d
输出:

我是一片云 天空是我家 \n 朝迎旭日升 暮送夕阳下

注意:这里编码和解码都是用的 enc 命令,只是解码加了 -d 参数。

md5 摘要

形成摘要:

echo "我是一片云 天空是我家 朝迎旭日升 暮送夕阳下" | openssl md5

输出

(stdin)= 2418617a0586d93db1db5e43260a43bb

校验摘要:
再生成一次,对比生成的字符串。

生成服务器端 web 服务器密码

用于基本验证访问的服务器密码, 密码只能是 8 位,多了会有警告。

openssl passwd -crypt yourpass

会生成

U0tfb.p0Pit5I

重复执行上面的指令时密码会有变化。所以密码是有随机变量在里面。

保存到 ·/etc/nginx/conf.d/pass` 文件中

$ cat /etc/nginx/conf.d/pass
youradmin:U0tfb.p0Pit5I

密码文件是 用户名: 加密密码 的格式存储的。

Nginx 服务器的配置

server {
        server_name  yourserver.cn;

        root /var/www/webapps/;

        index index.html index.htm;

        location / {
                auth_basic "server login auth";
                auth_basic_user_file conf.d/pass;
...

这样就能通过基本验证,保护服务器的内容只能在输入密码的情况下进行访问。

生成新的私钥和证书签名请求

证书请求:

openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key

随后可以把证书请求发给颁发机构来完成证书的生成(准备好钱哟)。

如果仅是测试用,可以生成自签名证书(不花钱,但要手动导入浏览器)

可以通过以下命令执行此操作:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

如果您不想使用密码来保护私钥,也可以添加-nodes(的缩写no DES)。否则,它将提示您输入“至少 4 个字符”的密码。

days您可以将参数(365 天)替换为任何数字以修改到期日期。然后,它将提示您输入“国家名称”之类的内容,但是您只需点击 Enter 并接受默认值即可。

添加 -subj '/CN=localhost' 以消除关于证书内容的问题(替换 localhost 为所需的域)。

对于在自动化中使用此工具的其他人,这里是该主题的所有常用参数:-subj "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=www.example.com"

除非您以前将自签名证书导入浏览器,否则它们不会与任何第三方进行验证。如果需要更高的安全性,则应使用由证书颁发机构(CA)签名的证书。

如果没钱(比如我),可以用 let’s encrypt。只要您的 Web 服务器可以通过 Internet 上的端口 80 上的 FQDN 对其进行访问,您就可以使用 LetsEncrypt 并获得免费的完整 CA 证书(有效期为 90 天,可以自动更新),该证书不会给出任何浏览器警告 / 消息。不过这已经和 OpenSSL 没啥关系了。

为现有私钥生成证书签名请求(CSR)

openssl req -key mydomain.key -new -out mydomain.csr

根据现有证书生成证书签名请求

 
 openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

从私钥中删除密码

openssl rsa -in privateKey.pem -out newPrivateKey.pem

使用 OpenSSL 检查

如果需要检查证书,CSR 或私钥中的信息,请使用这些命令。您还可以使用我们的在线工具检查 CSR 并检查证书。

检查证书签名请求(CSR)

openssl req -text -noout -verify -in CSR.csr

检查私钥

openssl rsa -in privateKey.key -check

检查证书

openssl x509 -in certificate.crt -text -noout

检查 PKCS#12 文件(.pfx 或.p12)

openssl pkcs12 -info -in keyStore.p12

使用 OpenSSL 进行调试

如果您收到的错误是私有证书与证书不匹配,或者您安装到站点的证书不受信任,请尝试以下命令之一。如果您要验证是否正确安装了 SSL 证书,请务必查看 SSL。

检查公钥的 MD5 哈希,以确保它与 CSR 或私钥中的内容匹配

openssl x509 -noout -modulus -in certificate.crt | openssl md5 
openssl rsa -noout -modulus -in privateKey.key | openssl md5 
openssl req -noout -modulus -in CSR.csr | openssl md5

检查 SSL 连接。应显示所有证书(包括中间体)

 openssl s_client -host bixuebihui.com -port 443

使用 OpenSSL 进行转换

这些命令允许您将证书和密钥转换为不同的格式,以使它们与特定类型的服务器或软件兼容。例如,您可以将可以与 Apache 一起使用的普通 PEM 文件转换为 PFX(PKCS#12)文件,并将其与 Tomcat 或 IIS 一起使用。使用我们的 SSL 转换器转换证书而不会弄乱 OpenSSL。

将 DER 文件(.crt .cer .der)转换为 PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

将 PEM 文件转换为 DER

openssl x509 -outform der -in certificate.pem -out certificate.der

将包含私钥和证书的 PKCS#12 文件(.pfx .p12)转换为 PEM

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

您可以添加 -nocerts 以仅输出私钥或添加 -nokeys 以仅输出证书。

将 PEM 证书文件和私钥转换为 PKCS#12(.pfx .p12)

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

如果您还知道有啥有趣的用法,欢迎评论补充。

正文完
 0