介绍
OpenSSL是面向TLS和SSL协议的全能工具,同时也是一个通用的加解密工具。
此博客参考:
常用选项
-noout
不打印base64编码的key,在某些情况下,会省略输出相关信息-modulus
显示用于计算公钥和私钥的模(见RSA)-new
创建-nodes
不加密-config file
指定额外的配置文件-x509
在req命令中,用于创建自签名的证书而不是证书签名请求(CSR)-in file
从file读取内容-inform FORM
指定输入的文件格式-out file
将生成内容写到文件-outform FORM
指定输出的文件格式
常用命令
- 生成RSA密钥
openssl genrsa -out private.key 2048
- 生成一个证书签名请求(CSR)
openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
- 检查RSA私钥
openssl rsa -in privateKey.key -check
- 输出证书细节
openssl x509 -in certificate.crt -text -noout
- 显示连接中TLS相关的细节
# 显示所有细节
openssl s_client -connect www.baidu.com:443
# 显示证书
openssl s_client -showcerts -connect www.baidu.com:443
- 将ANS.1 DER文件转换成PEM文件
openssl x509 -inform der -in certificate.cer -out certificate.pem
- 将PEM文件转换成ANS.1 DER文件
openssl x509 -outform der -in certificate.pem -out certificate.der
- 校验一个证书是否由某个CA颁发
openssl verify -verbose -CAfile ca.crt server.crt
- 生成带签名的摘要
# 使用SHA256算法生成签名,并使用private.key加密
openssl dgst -sha256 -sign private.key data.bin -out signature
- 解密RSA公钥加密的数据
生成https的X509v3证书
为了生成一个可用于https协议的证书,需要:
- 1.指定一个CA证书,如果没有可用的CA证书,可以自己生成一个
- 2.生成RSA公钥和私钥(假定使用RSA加密)
- 3.生成证书,指定CA根证书和RSA公钥
- 4.配置服务器,指定私钥和证书,令其在HTTS协议中使用该证书
- 5.配置客户端,令其信任生成的CA根证书
生成自签名证书(Root):
openssl req -new -x509 -days 1000 -key Root_CA.key -out Root_CA.crt
生成证书并使用根证书签名:
# 生成证书签名请求
openssl req -new -key Tectia_Server_passwordless_private.key -out Tectia_Server_request.csr
# 使用根证书签名生成最终证书
openssl x509 -req -days 1000 -in Tectia_Server_request.csr -CA Root_CA.crt -CAkey Root_CA.key -set_serial 00001 -out Tectia_Server_certificate.crt
附录
基础命令格式
# 执行子命令
openssl cmd [-help | ARGS]
# 查看帮助手册
man openssl-cmd
genrsa命令
生成RSA私钥,生成过程中,.代表素数通过初始测试, + 代表通过Miller-Rabin测试,*代表该数字重新生成,即不是素数,换行代表成功
示例:
- 生成2048位密钥
openssl genrsa -out rsa.key 2048
注意:生成的密钥文件中包含私钥和公钥以及生成所使用的大素数等所有RSA算法需要的信息。因此该密钥文件可用于提取公钥。
注意2048这个参数必须在命令的末尾。
rsa命令
该命令用于处理RSA密钥,可以转换到不同的格式,输出key的组成部分。
-inform DER|PEM,
DER使用ANS.1定义的RSAPrivateKey或SubjectPublicKeyInfo结构;PEM使用BASE64编码加上额外头部和尾部DER数据-outform DER|PEM
含义同-inform
-modulus
输出key的模-pubout
指定输出公钥,默认情况下输出私钥;如果输入是公钥,则该选项自动设置;-text
输出详细的信息,包括公钥和私钥的各个组成
示例:
- 从密钥文件中提取公钥信息(
-outform
可选择PEM
)
openssl rsa -in key.pem -pubout -out pubkey.pem -outform PEM
- 从密钥文件中提供公钥信息,以
ASN.1 RSAPublicKey
格式输出
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.der -outfrom DER
- 打印密钥文件包含的算法信息(素数,模等)
openssl rsa -in rsa.key -text -noout
- 将密钥文件从
PEM
格式转换成DER
格式
openssl rsa -in key.pem -outform DER -out keyout.der
req
[dn]
CN = www.feistyduck.com
emailAddress = webmaster@feistyduck.com
O = Feisty Duck Ltd
L = London
C = GB
s_client
s_client类似于nc工具自动建立tcp连接,s_client能够自动建立TLS连接,然后使用任何上层协议发送数据,它不局限于https。
用法:openssl s_client -connect HOST:PORT [选项]
选项:
-connect HOST:PORT
连接到指定端口,-connect
选项可由命令行位置参数指定-bind LOCAL:PORT
使用本地地址-servername val
指定SNI-CApath dir
CA的目录-CAfile file
CA文件-ssl_config FILE
指定配置文件-named_curve val
ECDHE加密套件的参数-cipher val
TLSv1.2的加密套件-ciphersuites val
TLSv1.3的加密套件-min_protocol val
指定最低TLS版本-max_protocol val
指定最高TLS版本-tls1_2
仅使用TLSv1.2-no_tls1_2
不使用TLSv1.2-alpn val
指定上层协议
例子:
- 测试百度
openssl s_client -connect www.baidu.com:443
- 测试nginx,并指定使用最简单的加密套件
openssl s_client -CAfile my-ssl.test.crt -cipher AES128-SHA -tls1_2 -servername my-ssl.test -bind localhost:12443 -connect my-ssl.test:443
ciphers
用于列出所有的加密套件,
openssl加密套件与标准套件名称的映射,参考:https://ciphersuite.info/cs/TLS_RSA_WITH_AES_128_CBC_SHA/
rsautl
加密/解密RSA密钥加密的数据,使用私钥解密,指定-decrypt
选项;使用公钥解密,指定-encrypt
选项。
注意,RSA
算法通常用于加密不太长的数据,因此主要用来做签名验证。
例子:
- 私钥解密
openssl rsautl -decrypt -inkey private.key -in data.bin -out data-decrypt.bin
- 私钥加密
openssl rsautl -encrypt -inkey private.key -in data.bin -out data-decrypt.bin
- 公钥加密(必须加上
-verify
参数指定是验证签名)
openssl rsautl -verify -inkey public.key -pubin -in data.bin -out data-decrypt.bin
- 使用私钥生成签名
openssl rsautl -sign -in file -inkey key.pem -out sig
- 使用公钥验证签名
openssl rsautl -verify -in sig -inkey key.pem
- 使用公钥验证签名,输出为
asn1
格式(X509
证书签名格式)
openssl rsautl -verify -inkey pubkey.pem -pubin -in certificate_signature_encrypted.bin -asn1parse
dgst
示例:
- 使用SHA256产生32字节(256位)的hash,并输出二进制文件
openssl dgst -sha256 -binary -out tmp file
X509
从证书中提取公钥
openssl x509 -in x509.pem -pubkey -noout >pubkey.pem
asn1parse
示例
- 解析DER文件
openssl asn1parse -inform DER
- X509证书的签名验证
openssl rsautl -verify -inkey pubkey.pem -pubin -in certificate_signature_encrypted.bin |openssl asn1parse -inform DER
来源:CSDN
作者:好吃吗
链接:https://blog.csdn.net/xhdxhdxhd/article/details/103796330