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