记一次加密通讯的过程
第一阶段:ClientHello:
支持的协议版本,比如tls 1.2;
客户端生成一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES、3DES、RSA;
支持的压缩算法;
第二阶段:ServerHello
确认使用的加密通信协议版本,比如tls 1.2;
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法;
服务器证书;
第三阶段:
验正服务器证书,在确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
发送以下信息给服务器端:
一个随机数;
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
客户端握手结束通知;
第四阶段:
收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有到的“会话密钥”;
向客户端发送如下信息:
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
服务端握手结束通知;
下图来个通俗版的(密匙版本,可能不是完全吻合):
创建私有CA的过程,以及为客户端发来的证书请求进行颁发证书
创建私有CA的过程
第一步:生成私钥
1 | [root@centos private]# (umask 077; openssl genrsa -out /etc/pki/CA/private/jerry_cakey.pam 8192) |
第二步:生成自签证书
1 | [root@centos private]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 |
第三步:为CA提供所需的目录及文件;**
1 | [root@centos private]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts} |
为客户端发来的证书请求进行颁发证书
第一步:用到证书的主机生成私钥:
1 | [root@centos ~]# cd /etc/httpd/ssl |
第二步:生成证书签署请求
1 | [root@centos ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 |
第三步:将请求通过可靠方式发送给CA主机
两台主机就用scp,我这里是都在一台虚拟机上就用cp命令,过于简单,就不贴过程了
第四步:在CA主机上签署证书
1 | [root@centos ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 |