Openssl证书工具使用手册

Posted 键客李大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openssl证书工具使用手册相关的知识,希望对你有一定的参考价值。

Openssl证书工具使用手册_数据

作者  | 李大白


容器相关证书类型


Client Certificate

用于服务端认证客户端,例如etcdctl、etcd proxy、fleetctl、docker客户端。

server certificate

服务端使用,客户端以此验证服务端身份,例如docker服务端、kube-apiserver。 peer certificate: 双向证书,用于etcd集群成员间通信。


Openssl简介


openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。

要想了解openssl,有几个前置的概念需要先熟悉一下:

SSL:SSL的全名叫做Secure Socket Layer(安全套接字层),最开始是由一家叫网景的互联网公司开发出来,主要是防止信息在互联网上传输的时候被窃听或者篡改,后来网景公司提交SSL给ISOC组织做标准化,改名为TLS。

非对称加密:非对称加密就是基于以上的现象产生的,用一个密钥对数据进行加密,然后可以使用另外一个不同的密钥对数据进行解密,这两个密钥就是:公钥和私钥。openssl还包含了公钥私钥的生成、摘要生成等各种工具。


Openssl 命令

3.1 摘要命令—dgst

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。openssl实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA和RIPEMD。此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。


1) 摘要一般有两个作用:

1)做信息完整性校验;

2)保存密码,有些密码是直接在数据库中采用MD5(真实密码值)保存的,有的还进行加盐处理,使其难以,这样密码只能重置,无法告诉你原始过程,因为摘要是不可逆的。


2) openssl dgst常用选项有

$ openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1]  #指定一种摘要算法

-out filename:将摘要的内容保存到指定文件中


3.2 对称加密命令—encOpenSSL

OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。

这7种分组加密算法分别是

  • AES
  • DES
  • Blowfish
  • CAST
  • IDEA
  • RC2
  • RC5

都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。

其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。语法格式:

$ openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] 
[-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P]
[-bufsize number] [-nopad] [-debug] [-none] [-engine id]​

  • options are-in 输入文件
  • -out 输出文件
  • -pass 密码
  • -e encrypt 加密操作
  • -d decrypt 解密操作
  • -a/-base64 base64 encode/decode, depending on encryption flag 是否将结果base64编码
  • -k passphrase is the next argument-kfile passphrase is the first line of the file argument-md 指定密钥生成的摘要算法 默认MD5
  • -S salt in hex is the next argument 用于加盐加密
  • -K/-iv key/iv in hex is the next argument 加密所需的key和iv向量
  • -[pP] print the iv/key (then exit if -P) 是否需要在控制台输出生成的 key和iv向量
  • -bufsize buffer size 读写文件的I/O缓存,一般不需要指定-nopad disable standard block padding 禁止标准填充
  • -engine e use engine e, possibly a hardware device 指定三方加密设备Cipher Types 以下是部分算法,我们可以选择用哪种算法加密-aes-128-cbc -aes-128-cbc-hmac-sha1 -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-gcm -aes-128-ofb

3.3 非对称加密命令

OpenSSL一共实现了4种非对称加密算法

  • DH算法:一般用户密钥交换
  • RSA算法:可用于密钥交换、数字签名(常用)、也可以用于数据加密(速度慢)
  • DSA算法
  • 椭圆曲线算法(EC)。

【生成私钥】

利用openssl命令的子命令genrsa生成私钥,然后再使用子命令rsa私钥中提取公钥。用于生成RSA私钥,不会生成公钥,因为公钥是从私钥提取语法格式:

$ openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [numbits]

-out filename :将生成的私钥保存至filename文件,若未指定输出文件,则为标准输出。

-numbits :指定要生成的私钥的长度,默认为1024。该项必须为命令行的最后一项参数。

-des|-des3|-idea:指定加密私钥文件用的算法,这样每次使用私钥文件都将输入密码,太麻烦所以很少使用。

-passout args :加密私钥文件时,传递密码的格式,如果要加密私钥文件时单未指定该项,则提示输入密码。传递密码的args的格式   

pass:password :password表示传递的明文密码  

env:var :从环境变量var获取密码值   

file:filename :filename文件中的第一行为要传递的密码。若filename同时传递给"-passin"和"-passout"选项,则filename的第一行为"-passin"的值,第二行为"-passout"的值  

stdin :从标准输入中获取要传递的密码


【提取公钥】

用rsa子命令从生成的私钥文件中提取公钥,语法格式:

openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]

选项:

-inform arg 输入文件编码格式,只有pem和der两种

-outform arg 输出文件编码格式,只有pem和der两种

-in arg input file 指明私钥文件的存放路径

-sgckey   Use IIS SGC key format -passin arg 如果输入文件被对称加密过,需要指定输入文件的密码

-out arg output file 指明将公钥的保存路径

-passout arg 如果输出文件也需要被对称加密,需要指定输出文件的密码

-des 对输出结果采用对称加密 des算法

-des3 对输出结果采用对称加密 des3算法

-seed 使用cbc种子加密PEM输出

-aes128, -aes192, -aes256 使用cbc aes加密PEM输出

-camellia128, -camellia192, -camellia256 以上几个都是对称加密算法的指定,生成私钥的时候一般会用到

-text 以明文形式输出各个参数值

-noout 不输出密钥到任何文件

-modulus 输出模数值

-check 检查输入密钥的正确性和一致性

-pubin 指定输入文件是公钥

-pubout 指定输出文件是公钥

-engine e 指定三方加密库或者硬件


利用公钥加密、私钥解密数据使用rsautl进行加密和解密操作,语法如下:

 openssl rsautl [-in file] [-out file] [-inkey file] [-pubin] [-certin] [-sign] [-verify] [-encrypt] [-decrypt] [-pkcs] [-ssl] [-raw] [-hexdump] [-asn1parse] openssl rsautl -hUsage: rsautl [options]

-in file 输入文件

-out file 输出文件

-inkey file 指定私有密钥文件,格式是RSA私有密钥文件

-keyform 指定私钥格式(默认为PEM)

-pubin input is an RSA public 指定输入的是RSA公钥

-certin input is a certificate carrying an RSA public key 指定输入的是证书文件

-ssl 使用SSLv2的填充方式

-raw 不进行填充

-pkcs 使用V1.5的填充方式(默认)

-oaep 使用OAEP的填充方式

-sign 使用私钥做签名

-verify 使用公钥认证签名

-encrypt 使用公钥加密

-decrypt 使用私钥解密

-hexdump 以16进制打印

-engine e 指定三方库或者硬件设备

-passin arg pass phrase source 传递密码来源


选项:

-subj:"/CN=value" 的值为master主机名或IP地址;

-days:设置证书的有效期。

$ openssl genrsa -out etcd_servr.key  2048            //生成2048位的私钥
$ openssl req -new -key etcd_server.key -config etcd_ssl.cnf \\
-subj "/CN=etcd-server" -out etcd_server.csr \\
-new:-key:-config:-subj:-out: \\
-out https://blog.csdn.net/caijiwyj/article/details/106840234?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162814587016780264050658%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162814587016780264050658&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blo​​g-2~all~top_positive~default-1-106840234.first_rank_v2_pc_rank_v29&utm_term=openssl&spm=1018.2226.3001.4187


以上是关于Openssl证书工具使用手册的主要内容,如果未能解决你的问题,请参考以下文章

使用openssl生成SSL完全参考手册

如何使用OpenSSL工具生成根证书与应用证书

openssl命令详解

1.3CA和证书以及openssl工具基础

使用 openssl 生成证书

使用 openssl 生成证书