1.3 openssl工具基础

CA和证书

CA(Certificate Authority)签证机构

    CA是被公认的的网络信任结构,CA证书的内容包括:

    颁发者 
    使用者 
    版本 
    签名算法 
    签名哈希算法 
    使用者 
    公钥 
    指纹 
    指纹算法 

    …… 

CA的作用是为网络中通信双方的公钥提供可信任数字签名。


SSL安全协议

    说到 CA,就不得不说 SSL 。SSL 是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 HTTPS 使用 SSL 来实现安全的通信。

    SSL链接总是由客户端机发起,SSL握手的流程大致如下:

(1) 客户端发送列出客户端密码能力的客户端“您好”消息(以客户端首选项顺序排序),如 SSL 的版本、客户端支持的密码对和客户端支持的数据压缩方法。消息也包含 28 字节的随机数。

(2) 服务器以服务器“您好”消息响应,此消息包含密码方法(密码对)和由服务器选择的数据压缩方法,以及会话标识和另一个随机数。

    注意:客户端和服务器至少必须支持一个公共密码对,否则握手失败。服务器一般选择最大的公共密码对。

(3) 服务器发送其SSL数字证书。(服务器使用带有 SSL 的 X.509 V3 数字证书。)

    如果服务器使用 SSL V3,而服务器应用程序(如 Web 服务器)需要数字证书进行客户端认证,则客户端会发出“数字证书请求”消息。在 “数字证书请求”消息中,服务器发出支持的客户端数字证书类型的列表和可接受的CA的名称。

(4) 服务器发出服务器“您好完成”消息并等待客户端响应。

(5) 一接到服务器“您好完成”消息,客户端( Web 浏览器)将验证服务器的SSL数字证书的有效性并检查服务器的“你好”消息参数是否可以接受。

    如果服务器请求客户端数字证书,客户端将发送其数字证书;或者,如果没有合适的数字证书是可用的,客户端将发送“没有数字证书”警告。此警告仅仅是警告而已,但如果客户端数字证书认证是强制性的话,服务器应用程序将会使会话失败。

(6) 客户端发送“客户端密钥交换”消息。
    此消息包含 pre-master secret (一个用在对称加密密钥生成中的 46 字节的随机数字),和 消息认证代码 ( MAC )密钥(用服务器的公用密钥加密的)。
如果客户端发送客户端数字证书给服务器,客户端将发出签有客户端的专用密钥的“数字证书验证”消息。通过验证此消息的签名,服务器可以显示验证客户端数字证书的所有权。

注意: 如果服务器没有属于数字证书的专用密钥,它将无法解密 pre-master 密码,也无法创建对称加密算法的正确密钥,且握手将失败。

(7) 客户端使用一系列加密运算将 pre-master secret 转化为 master secret ,其中将派生出所有用于加密和消息认证的密钥。然后,客户端发出“更改密码规范” 消息将服务器转换为新协商的密码对。客户端发出的下一个消息(“未完成”的消息)为用此密码方法和密钥加密的第一条消息。

(8) 服务器以自己的“更改密码规范”和“已完成”消息响应。

(9) SSL 握手结束,且可以发送加密的应用程序数据。

X.509:定义了证书的结构以及认证协议标准

    版本号
    序列号
    签名算法
    颁发者
    有效期限
    主体名称
    主体公钥
    CRL分发点
    扩展信息
    发行者签名

数字证书的类型

    证书授权机构的证书、服务器、用户证书

获取证书的方法

使用证书授权机构,CA的数字证书由自己使用 X.509 颁发
    生成签名请求(csr)
    将csr发送给CA
    从CA处接收签名
自签名的证书
    自已签发自己的公钥

OpenSSL

    base64编码


    base64类型的编码能够将不可读的二进制数据转换为可读的文本。其原理是:将二进制数据以每6个(2^6=64)一组进行分段,再将其十进制对应的字符输出,不足64位的使用=补齐。

    对称加密

使用 enc 子命令完成对称加密/解密

[root@CentOS6 data]# openssl enc -des3 -a -salt -in fstab -out fstab.3des
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@CentOS6 data]# ll fstab*
-rw-r--r-- 1 root root 595 May 19 14:52 fstab
-rw-r--r-- 1 root root 837 May 19 20:48 fstab.3des
[root@CentOS6 data]# openssl enc -d -des3 -a -salt -in fstab.3des -out fstab
enter des-ede3-cbc decryption password:
[root@CentOS6 data]# ll fstab*
-rw-r--r-- 1 root root 595 May 19 21:10 fstab
-rw-r--r-- 1 root root 837 May 19 20:48 fstab.3des

    命令中选项

-e 默认为使用-e选项,所以缺省
-des3 使用3DES加密算法
-salt 使用盐,保证同一个文件的加密生成的密文每次不同
-in 需要openssl处理的文件

-out 处理完输出的文件

    单向加密

使用 dgst 子命令完成单向加密

[root@CentOS7 data]#⮀openssl dgst -sha256 fstab 
SHA256(fstab)= 9e898bd405a9c2e76ea0f3f4cf44f4ddb13c5d2c8e98f55caee6bfd1e854afb8

缺省了-hex选项:使用十六进制输出加密信息

    生成加密口令和随机数

使用 passwd 子命令生成加密口令

root@CentOS7 data]# openssl passwd -1   默认生成加密口令时会添加盐,-1选项使用MD5加密
Password: 
Verifying - Password: 
$1$OuBYlDPg$SIRQgUX31hR0Ua3J6ftqk0
[root@CentOS7 data]# openssl passwd -1   #两次密码相同,但生成的加密口令并不相同
Password: 
Verifying - Password: 
$1$PawArx1w$U4BkMGKvz14RIRwXd.ynM0
[root@CentOS7 data]# openssl passwd -1 -salt "OuBYlDPg"   #使用-salt选项可以指定盐,与第一次生成相同的加密口令
Password: 
$1$OuBYlDPg$SIRQgUX31hR0Ua3J6ftqk0

使用 rand 子命令生成随机数

[root@CentOS7 data]#⮀openssl rand -hex 12  #生成12字节的十六进制表示的随机数
4a3129cb49989274389b2179
[root@CentOS7 data]#⮀openssl rand -base64 12   #生成12字节的base64编码的随机数
Enh76ZTmZaUXNvq1









猜你喜欢

转载自blog.csdn.net/M30_Miriam/article/details/80377276
1.3