ssl协议结构
ssl握手(图中的数字代表各个阶段)
SSL建立第一阶段:
客户端首先发送ClientHello消息到服务端,服务端收到ClientHello消息后,再发送ServerHello消息回应客户端。
SSL建立第二阶段:
服务器向客户端发送消息。服务器启动SSL握手第2阶段,是本阶段所有消息的唯一发送方,客户机是所有消息的唯一接收方。该阶段分为4步:
证书:服务器将数字证书和到根CA整个链发给客户端,使客户端能用服务器证书中的服务器公钥认证服务器。
服务器密钥交换(可选):这里视密钥交换算法而定
证书请求:服务端可能会要求客户自身进行验证。
服务器握手完成:第二阶段的结束,第三阶段开始的信号
SSL建立第三阶段:
客户端收到服务器发送的一系列消息并解析后,将本端相应的消息发送给服务器。客户机启动SSL握手第3阶段,是本阶段所有消息的唯一发送方,服务器是所有消息的唯一接收方。该阶段分为3步:
证书(可选):为了对服务器证明自身,客户要发送一个证书信息,这是可选的,在IIS中可以配置强制客户端证书认证。
客户机密钥交换(Pre-master-secret):这里客户端将预备主密钥发送给服务端,注意这里会使用服务端的公钥进行加密。
证书验证(可选),对预备秘密和随机数进行签名,证明拥有(a)证书的公钥。
SSL建立第四阶段:
完成握手协议,建立SSL连接。客户机启动SSL握手第4阶段,使服务器结束。该阶段分为4步
建立起一个安全的连接,客户端发送一个Change Cipher Spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中。然后,客户端用新的算法、密钥参数发送一个Finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对客户端整个握手过程的消息进行校验。服务器同样发送Change Cipher Spec消息和Finished消息。握手过程完成,客户端和服务器可以交换应用层数据进行通信。
工作流程:
SSLCertificateFile: /etc/pki/tls/certs/localhost.crt //系统自带的证书
SSLCertificateKeyFile:/etc/pki/tls/private/localhost.key
vim /etc/httpd/conf.d/ssl.conf //ssl协议的配置文件
搭建CA服务器和服务器签证
使用openssl生成自签名证书:
搭建 CA Server
一、生成私钥(CA机构) [root@manage ca_learning]# openssl genrsa -out ca.key 2048
二、得有证书(CA机构的证书) 生成公钥:[root@manage ca_learning]# openssl rsa -in ca.key -out ca.pub -pubout
三、生成证书:[root@manage ca_learning]# openssl req -new -x509 -days 36500 -key ca.key -out ca.crt
前三步为搭建CA机构(私有的,你自己的)
四、为服务器去签发证书
1.生成私钥: openssl genrsa -out server.key 2048
2.生成申请文件:.csr openssl req -new -key server.key -out server.csr
3.将申请文件提交给CA机构(ca.key, ca.crt), 让ca机构去签发证书 openssl x509 -req -days 365000 -in server.csr -CA cert.crt -CAkey ca.key -CAcreateserial -out server.crt
字段解释:
x509: 签发509证书
-req: 说明输入是一个证书申请文件
-in: 指定申请文件
-CA: 指定CA机构的证书
-CAkey: 指定CA结构的私钥
-CAcreateserial: CA创建序列号:唯一标识
-out: 输出证书
//服务器得先产生公钥和私钥 提交证书申请文件.csr CA签发证书-> crt证书
总共生成的文件(其中ca.slr是自动生成的随机数文件)
第一步:需要有一个访问该网站的ip
nmcli connection modify ens160 +ipv4.addresses 192.168.31.146/24
第二步:新建网站目录,新建首页文件
vim /var/www/http/https/index.html
编辑index.html文件
第三步:在 /etc/httpd/conf.d/目录,去新建配置文件:myssl.conf
vim /etc/httpd/conf.d/myssl.conf
第四步:在myssl.conf文件中配置
<Directory "/var/www/http/https"> //目录权限设置
AllowOverride None
Require all granted
</Directory>
<VirtualHost 192.168.31.146:443>
SSLEngine on
SSLProtocol all -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA //密码套件,列出允许客户端协商的密码。
#SSLCipherSuite PROFILE=SYSTEM
SSLCertificateFile /root/ca_learning/server.crt //指定证书路径: 证书的位置: server.crt
SSLCertificateKeyFile /root/ca_learning/server.key //指定密钥文件路径 # server.key的位置
DocumentRoot /var/www/http/https //访问的根目录
ServerName 192.168.31.146:443 //访问服务器的名字
</VirtualHost>
第五步:重启httpd服务
systemctl restart httpd
第六步:测试