简明指南
OpenSSL 的一般使用
OpenSSL是一个开放源代码的软件库包。这个包广泛被应用在互联网的网页服务器上。 其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。
以下命令均在 cygwin 或 linux 下运行 以下命令是在这个版本
OpenSSL 1.1.1g 21 Apr 2020下的 OpenSSL 运行的
-
查看 openssl 的版本信息
openssl version -a -
查看帮助,这里会输出 openssl 支持的算法
openssl help -
查看某个命令的帮助
openssl 某个命令 --help -
查看密码套件
openssl ciphers -v -
数字摘要
echo "123" | openssl dgst -sha256
openssl dgst -sha256 文件路径
echo "123" | openssl dgst -sha256 | awk '{print $2}'
openssl dgst -sha256 文件路径 | awk '{print $2}' -
输出当前时间戳
date +%s -
输出纳秒 这是一个 9 位的数字 一些简单的伪随机数算法会使用纳秒作为种子
date +%N -
生成 32 位随机字符串
openssl rand -base64 32 -
输出随机数字
# 输出随机数字,但无法确定数字的长度
openssl rand -base64 32 | tr -dc '0-9'
openssl rand -base64 64 | tr -dc '0-9'
# 生成16位随机数 有可能不足16位
openssl rand -base64 128 | tr -dc '0-9' | cut -c1-16 -
查看 对称加密命令和可以使用的算法
openssl enc -help -
enc 使用对称加密算法
openssl enc -aes-256-cfb -e -in a.txt -a -out b.txt -pass pass:123
openssl enc -aes-256-cfb -d -in b.txt -a -out c.txt -pass pass:123
# -aes-256-cfb 使用的算法
# -e 加密
# -d 解密
# -in 输入的文件路径
# -out 输出文件的路径
# -a 把输出转换成 base64 加密时有这个参数,解密时也要有这个参数
# -pass 数入密码和输入密码的方式
# pass
# file
# stdio
# env
# fd -
生成 rsa 私钥
openssl genrsa -out rsa_private_key.pem 4096
# 默认是 pem 格式的
# -out 指定生成文件的路径
# 最后的 4096 是生成密钥的长度
# 生成的密钥对是 pkcs1 格式的, openssl 有相应的命令转成 pkcs8 或 pkcs12 格式 -
从私钥中提取公钥
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
# -pubout 提取公钥
# -out 指定生成文件的路径
# -in 私钥路径 -
公钥加密文件
openssl rsautl -encrypt -in a.txt -inkey rsa_public_key.pem -pubin -out b.txt
# -out 加密后的文件路径
# -in 需要加密的文件路径
# -inkey 公钥路径 -
私钥解密文件
openssl rsautl -decrypt -in b.txt -inkey rsa_private_key.pem -out c.txt
# -out 解密后的文件路径
# -in 需要解密的文件路径
# -inkey 私钥路径 -
使用私钥生成签名
openssl dgst -sha256 -sign rsa_private_key.pem -keyform PEM -out sign.sha256 a.txt
# -sha256 哈希算法
# -sign 私钥路径
# -keyform 私钥的格式
# -out 签名生成的路径
# 最后的 a.txt 是需要生成签名的文件路径 -
使用公钥验证签名
openssl dgst -sha256 -verify rsa_public_key.pem -keyform PEM -signature sign.sha256 a.txt -
对文件的内容进行 base64 编码
openssl enc -base64 -e -in sign.sha256 -out sign.sha256.base64 -
对文件的内容进行 base64 解码
openssl enc -base64 -d -in sign.sha256.base64 -out sign.sha2562 -
比较两个文件的内容,如果两个文件内容一致则不会有输出
diff 文件1的路径 文件2的路径 -
生成一个 csr 文件
- 启动一个问题/回答的交互式会话,其它随便填就好,extra attributes 可以留空
- 其实 openssl 有一键生成密钥对, csr 和 证书的命令
openssl req -new \
-key rsa_private_key.pem \
-keyform PEM \
-out myserver.csr
# -new 生成一个新的 csr 文件
# -key 私钥文件路径
# -keyform 私钥的格式
# -out 生成的 csr 文件路径
-
查看 csr 文件内容
openssl req -text -in myserver.csr -noout -verify
# -in csr 文件路径 -
使用 csr 和 私钥生成自签证书
openssl x509 \
-sha256 \
-signkey rsa_private_key.pem \
-in myserver.csr \
-req -days 365 -out domain3.crt
# x509 生成 x509 格式的证书
# -sha256 证书采用的哈希算法
# -signkey 私钥路径
# -in csr 文件路径
# -days 证书有效天数
# -out 生成的证书路径 -
一条命令生成密钥和证书
openssl req -newkey rsa:4096 -nodes -keyout rsa_private_key.pem -x509 -days 365 -out domain.crtopenssl req -newkey rsa:4096 -nodes -keyout rsa_private_key.pem -x509 -days 365 -out domain.crt -subj "/C=CN/ST=State/L=City/O=Ltd/OU=Section/CN=localhost" -
查看证书内容
openssl x509 -in domain.crt -noout -text -
查看证书序列号
openssl x509 -in domain.crt -noout -serial -
查看证书有效时间
openssl x509 -in domain.crt -noout -dates