HTTP存在的问题
1、无法保证访问到受信网站
当我们要访问一个网站时,如何才能保证这个网站就是我们要的?假设场景如下:
2、无法保证数据私密性和完整性
HTTP协议的数据在传输过程中使用明文传输,很容易被抓取和篡改,可使用tcpdump工具进行验证。
HTTPS的解决思路
1、网站受信鉴权
引入第三方授信服务商,由授信服务商提供网站证书签名,保证网站可信。
2、数据私密性和完整性
HTTPS协议利用网站证书签名来生成相应的公钥和密钥,对数据报文进行加解密处理。
HTTPS的流程和原理
以app<- - - ->server为例
前提
向第三方授信服务商购买证书,或在服务器生成本地证书,并将证书放到网站服务器的指定路径下,同时将证书发给客户端app保存在本地。
https的工作流程
1、校验服务器:客户端向CA机构认证服务器信息
2、协商会话密钥:客户端和服务器协商会话加密密钥
3、加密通讯:客户端和服务器使用会话密钥加密数据报文
注:由于非对称加密的算法复杂,占用较多CPU资源,实际使用时会放弃第7、8两步。
HTTPS的配置
以本地自签名证书为例
证书生成
由于没有向第三方申请证书,我们使用openssl生成本地证书来演示https的配置。
nginx配置https端口转发
1、nginx需要安装支持ssl的模块。
2、在nginx配置文件中新增https端口转发配置
证书生成
1、制作证书私钥:
>openssl genrsa -des3 -out test_yunqixin_service.crt 1024
2、使用证书私钥制作解密后的证书私钥:
>openssl rsa -in test_yunqixin_service.crt -out test_yunqixin_service_nopass.key
3、使用证书私钥生成证书签名:
>openssl req -new -key test_yunqixin_service.crt -out test_yunqixin_service.csr
提示输入证书信息:Common Name (eg, your name or your server‘s hostname) []:
此处我们输入网站域名:test.yunqixin.site,这很重要,必须输入证书绑定的域名。
4、使用证书私钥和签名生成证书crt文件:
>openssl x509 -req -days 10000 -in test_yunqixin_service.csr -signkey test_yunqixin_service_nopass.key -out test_yunqixin_service.crt
证书生成
经过上面四个步骤,得到.crt文件和.key文件,内容如下。
这两个文件也是需要配置到nginx的配置文件里面。
nginx配置https端口转发
1、ssl配置:端口(默认443)、ssl协议及版本、ssl加密方式、证书路径
2、nginx转发配置:与http转发配置一致
https效果