SSL协议可分为两层
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL协议提供的服务
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 加密数据以防止数据中途被窃取;
- 维护数据的完整性,确保数据在传输过程中不被改变。
Https请求过程
<br />HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议可进行加密传输、身份认证的网络协议, 要比HTTP协议安全。<br />HTTP和HTTPS使用的是完全不同的连接方式,使用的端口也不一样,前者是80,后者是443。<br />HTTPS 和HTTP 协议相比提供了:身份认证:第三方无法伪造服务端(客户端)身份**
- 客户端向一个需要https访问的网站发起请求。
- 服务器将证书发送给客户端进行校验。证书里面包含了其公钥。这里要特别说一下客户端到底 如何来校验对方发过来的数字证书是否有效。
- 首先在本地电脑寻找是否有这个服务器证书上的ca机构的根证书。如果有继续下一步,如果没有弹出警告。
- 使用ca机构根证书的公钥对服务器证书的指纹和指纹算法进行解密。
- 得到指纹算法之后,拿着这个指纹算法对服务器证书的摘要进行计算得到指纹。
- 将计算出的指纹和从服务器证书中解密出的指纹对比看是否一样如果一样则通过认证。
- 校验成功之后,客户端会生成一个协商密钥然后使用服务器证书的公钥进行加密之后发送给服务器。
- 服务器通过使用自己的私钥解密得到这个协商密钥。
- 服务器从此开始使用这个协商密钥进行对称加密开始和客户端进行通信。
- 客户端拿到值用对称加密方式 使用协商密钥进行解密。
为什么不一直使用非对称进行加密,而是在类似握手之后开始使用对称加密算法进行https通信
非对称加密的消耗和所需的计算以及时间远比对称加密消耗要大,所以在握手和认证之后,服务器和客户端就开始按照约定的随机串,对后续的数据传输进行加密。
nginx配置https
server {
listen 443 ssl;
server_name draw.lyan.me;
ssl_certificate /etc/nginx/ssl_certs/draw.lyan.me.pem;
ssl_certificate_key /etc/nginx/ssl_certs/draw.lyan.me.key;
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 80;
server_name draw.lyan.me; # 你的域名
rewrite ^(.*) https://$server_name$1 permanent; # 强制跳转https
}
证书(Certificate):.cer(windows), .crt,
私钥(Private Key):.key
证书+公钥:.pem
证书签名请求(Certificate sign request):.csr
pem - base64编码
der - 二进制编码