![OpenSSL入门教程分为6步骤 1 OpenSSL入门教程分为6步骤](https://img.hotbests.com/2020/12/openssl-tutorial.png)
OpenSSL入门教程分为6步骤,OpenSSL是最受欢迎的加密库之一。它最常用于实现安全套接字层和传输层安全性(SSL和TLS)协议,以确保计算机之间的安全通信。近年来,由于TLS提供更高级别的安全性,所以SSL基本上已经过时了,但是有些人已经习惯了将这两种协议都称为SSL。
密码术是一项棘手的事情,OpenSSL具有太多的功能以至于不能在一篇文章中介绍,但是此OpenSSL教程将帮助您开始创建密钥和证书。
OpenSSL教程:互联网安全简介
当客户端请求与服务器的安全连接时,服务器又请求信息以找出客户端可以支持的密码安全类型。一旦确定了最安全的选项,就会发生以下情况:
- 服务器发送使用服务器的公共密钥签名的安全证书。
- 客户端验证证书后,它将生成一个私钥,并将其发送到使用公钥加密的服务器。
- 接下来,双方都使用秘密密钥来创建两组公共-私有密钥。最后,可以开始安全通信。
SSL和TLS是用于完成这些步骤的许多安全协议中的两个。要实现这些协议,我们需要像OpenSSL这样的软件。
OpenSSL入门教程
在本指南和其他OpenSSL教程中,您会遇到大量的缩写。为了快速参考,以下是您可能会遇到的一些术语的简短列表:
- CSR:证书签名请求
- DER:杰出的编码规则
- PEM:隐私增强型邮件
- PKCS:公钥密码标准
- SHA:安全哈希算法
- SSL:安全套接字层
- TLS:传输层安全性
第1部分-入门
您可以从官方OpenSSL网站下载大多数平台的源代码。
如果您需要Windows发行版,尽管有很多选择,但Shining Light Productions还是不错的选择。成功安装所有组件后,让我们开始尝试使用OpenSSL命令行工具。
首先,您可以使用以下命令显示您正在运行的OpenSSL版本:
openssl version -a
要获取标准命令的完整列表,请输入以下内容:
openssl list-standard-commands
查看官方OpenSSL文档,以获取有关标准命令的说明。要查看OpenSSL中可用的许多秘密算法,请使用:
openssl list-cipher-commands
现在,让我们尝试一些加密。如果您想加密文本“ Hello World!” 使用使用CBC模式和256位密钥的AES算法,您将执行以下操作:
touch plain.txt echo "Hello World!" > plain.txt openssl enc -aes-256-cbc -in plain.txt -out encrypted.bin //enter aes-256-cbc encryption password: example //Verifying - enter aes-256-cbc encryption password: example
系统将提示您输入一个密码,将从该密码中计算出256位密钥。在上面的示例中,使用了密码example
,但是您应该使用更强的密码。现在,您应该有一个名为的二进制文件encrypted.bin
,您可以按以下步骤解密:
openssl enc -aes-256-cbc -d -in encrypted.bin -pass pass:example // Hello World!
第2部分-公钥和私钥
为了举例说明,我们可以演示OpenSSL如何使用RSA算法管理公共密钥。您当然可以使用其他算法,并且将应用相同的原理。第一步是生成公用和专用密钥对。输入以下命令以创建一个1024位的RSA密钥:
openssl genrsa -out key.pem 1024
现在,您应该有一个key.pem
包含公用密钥和专用密钥的文件。就像文件名所暗示的那样,私钥是使用“增强隐私电子邮件”(PEM)标准进行编码的。使用以下代码显示它:
cat key.pem
您应该看到字符的长组合。有关如何生成密钥的详细信息,请输入:
openssl rsa -in key.pem -text -noout
此命令应返回有关公共和私有指数,模数以及用于优化算法的其他方法和数字的信息。在这种情况下,该-noout
选项可防止以base 64格式显示密钥,这意味着只能看到十六进制数字。当然,公共指数是一个例外,因为1024位密钥始终为65537。
要加密我们的私钥,我们使用以下代码:
openssl rsa -in key.pem -des3 -out enc-key.pem
密钥文件加密后,将提示您创建密码。接下来,我们可以key.pem
使用以下命令从文件中提取公钥:
openssl rsa -in key.pem -pubout -out pub-key.pem
最后,我们准备使用我们的密钥加密文件。使用以下格式:
openssl pkeyutl -encrypt -in <input_file> -inkey <key.pem> -out <output_file>
在上述情况下,<input_file>
是您要加密的文件。由于我们使用的是RSA,请记住该文件不能超过116个字节。该<key.pem>
是包含公开密钥的文件。如果该文件也不包含私钥,则必须使用指示-pubin
。该<output_file>
是加密的文件名。
现在,要解密文件,您只需翻转方程式即可。更改-encrypt
为-decrypt
,然后切换输入和输出文件。
第3部分-创建数字签名
最后,我们可以产生一个数字签名并进行验证。使用公钥算法直接签名大文件效率低下,因此我们应该首先计算要签名信息的摘要值。可以使用以下命令完成此操作:
openssl dgst -<hash_algorithm> -out <digest> <input_file>
在此示例中,<hash_algorithm>
您选择的是计算摘要值的算法。该<input_file>
是包含要散列数据的文件,而“消化”是将包含散列应用的结果的文件。
下一步是计算摘要值的签名,如下所示:
openssl pkeyutl -sign -in <digest> -out <signature> -inkey <key.pem>
最后,您可以像下面这样检查签名的有效性:
openssl pkeyutl -verify -sigfile <signature> -in <digest> -inkey <key.pem> -pubin
在这里,signature
是签名的文件名,key.pem
也是带有公钥的文件。为了自己确认验证,您可以计算输入文件的摘要值,并将其与从数字签名验证产生的摘要值进行比较。
第4部分-证书签名请求
假设您要创建由自己的证书颁发机构签名的数字证书。必须先生成证书签名请求或CSR,然后才能从证书颁发机构或CA获得SSL证书。CSR包括公钥以及一些在签名时插入证书中的其他信息。
首次创建CSR时,系统会要求您提供一些有关您自己或您的组织的信息。在“公用名”或CN字段中,您必须提供证书所针对的主机的标准域名。如果您实际上是从CA购买SSL证书,那么您提供的信息应该是真实且准确的!假设您要使用HTTPS保护Apache HTTP或Nginx Web服务器。您可以使用以下代码段从头开始创建新的2048位私钥以及CSR:
假设您要使用HTTPS保护Apache HTTP或Nginx Web服务器。您可以使用以下代码段从头开始创建新的2048位私钥以及CSR:
openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
只需将“ domain”替换为您的域名即可。在这里,该-newkey rsa:2048
选项告诉OpenSSL它应使用RSA算法来创建2048位密钥,而-nodes选项指示该密钥不应受到密码保护。
提供所有必要的信息后,将生成您的CSR。现在,您可以将其发送到CA并请求SSL证书。如果您的CA支持SHA-2,如果您希望CSR对SHA-2签名,请确保添加-sha256选项。
要为已经存在的私钥创建CSR,您将使用以下格式:
openssl req -key domain.key -new -out domain.csr
再次,domain
用您的域名替换。-key
此处的选项表示您正在使用现有的私钥,而-new
表示您正在创建新的CSR。在前面的示例中,-new
暗示是因为您要创建新密钥。
假设您已经拥有要续订的证书,但是您却以某种方式丢失了原始CSR。不要惊慌 您可以根据证书和私钥中的信息生成一个新证书。例如,如果您使用的是X509证书,则可以使用以下代码:
openssl x509 -in domain.crt -signkey domain.key -x509toreq -out domain.csr
-x509toreq
需要该选项以使OpenSSL知道证书类型。
第5部分-生成SSL证书
如果您希望获得SSL证书的额外安全性,但又负担不起或不想被CA所困扰,那么一种比较便宜的选择就是签名自己的证书。自签名证书是用自己的私钥签名的,它们在加密数据方面与CA签名证书一样有效。但是,用户可能会从其浏览器收到警告,表明连接不安全,因此实际上仅在不需要证明服务身份的环境(例如在非公共服务器上)中才建议使用自签名证书。
同样,假设您使用HTTPS保护Apache HTTP或Nginx Web服务器的安全。以下命令将创建一个2048位私有密钥以及一个自签名证书:
openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt
该-x509
选项告诉OpenSSL您需要自签名证书,而-days 365
表明该证书的有效期为一年。OpenSSL将生成一个临时CSR,以收集与证书关联的信息,因此您将必须照常回答提示。
如果您已经具有要与自签名证书关联的私钥,则只需稍微更改代码即可:
openssl req -key domain.key -new -x509 -days 365 -out domain.crt
请记住,-new
由于您是根据现有密钥创建新的CSR,因此必须包含该选项。
第6部分-查看证书
要查看证书和CSR文件,您必须从PEM格式对其进行解码。使用以下命令以纯文本格式查看CSR的内容:
openssl req -text -noout -verify -in domain.csr
要以纯文本格式查看证书的内容,请使用:
openssl x509 -text -noout -in domain.crt
您可以通过将证书的名称插入以下代码来验证证书是否由特定的CA签名:
openssl verify -verbose -CAFile ca.crt domain.crt
OpenSSL入门教程结论
在当今数字化日益发展的世界中,必须提高互联网安全性以保护我们自己的安全性。许多网站数据库包含有关访客的信息宝库,并且黑客一直在学习导航系统漏洞并利用此类数据的新方法。这就是为什么安全协议必须继续发展的原因。随时了解最新信息,以确保为用户提供足够的保护。
翻译自:https://www.keycdn.com/blog/openssl-tutorial