HTTPS协议原理
https协议是http协议的一种升级版,具有一定的安全性。在http协议和TCP协议之间有一层安全协议SSL或者STL。在通信之前通过SSL或者STL协议对数据进行加密,HTTPS协议既具有单向认证功能也具有双向认证功能。
SSL/TLS
SSL/TLS协议分为两层协议,一层是记录协议,一层是握手协议。
握手协议步骤如下:
1、客户端发送信息到服务端,信息包含如下内容:协议的版本信息、加密算法、压缩算法、产生的随机数等。
2、服务端在收到信息后,会向客户端发出响应信息,包含:协议的版本信息、加密算法、压缩算法、产生的随机数、数字证书等。
3、客户端在收到信息后对证书进行校验。
4、客户端验证证书合法性后,会对服务端发送经过服务端公钥加密后的预主秘钥,
5、服务端在收到预主秘钥后,通过私钥进行解密,并使用两端的随机数加上预主秘钥来生成主秘钥,然后通过主秘钥生成加密秘钥。
6、客户端也会通过预主秘钥、两端的随机数生成客户端的主秘钥,并通过主秘钥生成加密秘钥。
7、客户端通知服务端未来信息使用加密秘钥加密信息。
8、服务端通知客户端未来信息使用的加密秘钥加密信息。
HTTPS协议实现
HTTPS协议的实现主要分为两步:创建证书和配置nginx。
一、创建证书
配置一个HTTPS服务所需要的证书包括几个部分:
- Server Key(服务器私钥)
- CSR(Certificate Signing Request)
- CRT(X509 Certificate)
创建证书的基本流程是这样:
- 生成自己的服务端私钥
- 输入基本信息并用私钥签名生成CSR
- 提交CSR给证书机构CA(免费或商业证书)签名生成CRT,或自己做CA签名生成CRT(自签名证书)
创建证书的步骤如下:
1、生成服务器私钥:
openssl genrsa 1024 > server.key
说明:这是用128位rsa算法生成密钥,得到server.key文件
2、生成CSR:
openssl req -new -keyserver.key-outcertreq.csr
说明:这是用步骤1的密钥生成证书请求文件server.csr, 这一步提很多问题,一一输入
3、生成证书:
openssl req -x509 -days 365 -key server.key -in server.csr > server.crt
说明:这是用步骤1,2的的密钥和证书请求生成证书server.crt,-days参数指明证书有效期,单位为天。
二、在nginx中配置
1、修改nginx配置文件
server { listen 443; server_name selfssl.hxkj.vip; //此处填写你自己的域名 ssl on; root /usr/share/nginx/html; ssl_certificate "/home/ssl/ssl.crt"; //此处填写刚刚生成的ssl.crt文件路径 ssl_certificate_key "/home/ssl/ssl.key"; //此处填写刚刚生成的ssl.key文件路径 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
2、进行热加载
nginx -s reload
来源:https://www.cnblogs.com/youzhongmin/p/9260926.html