最近部门在进行对外暴露接口http协议向https协议转换
上大学时,学习过计算机网络,包括https协议,https是在http(HyperText Transfer Protocol)协议的基础上,增加了ssl(Secure Sockets Layer)
http协议在网络上明文传输,容易被他人盗取信息,篡改信息等,在http协议上可以增加一些防护措施及实践中常用的一些技巧;
1.页面及服务端请求时添加时间戳;
页面请求:在http get请求时添加随机数,可以是时间等信息,防止浏览器缓存造成时间不一致;
服务端响应:服务响应时,对传递过来的时间戳进行校验,一般会有个时间限制,比如2分钟等,这种方式能够避免重放攻击,防止有恶意用户截取到相关的数据之后,去伪造请求,获取服务端有价值数据(此部分需要结合特征值一起使用);
2.服务端调用需要携带应用标识及传递的签名;
后端服务需要知道请求服务的来源,很多服务没有标识来源,比如线上流量过大,有恶意用户去刷接口时,需要知道调用来源;
在服务接入时,需要约定一套校验的流程,比如计算 MD5(传递参数,salt),将算法提供给接入方,服务端对传递过来的参数进行校验;
虽然以上两种方式能够减少信息被篡改的几率,不过重要的信息交互时务必使用https协议
好了,以上是http协议日常互联网应用开发时,需要注意的地方;
为什么使用https协议?
https协议能够屏蔽传递信息的细节,不对外暴露传递的参数,客户端与服务端信息加密传递;
https协议具体怎么加密呢?
我们都知道,加密的方式分为对称加密和非对称加密;
具体应用:电报
存在问题,秘钥一旦丢失,所传递的加密内容都将被他人获取;
加密方式简单,加密解密效率较高;
加密更相对于对称加密更加安全,但加密解密时会耗费更大的代价;
回到https协议上来,https协议时如何去工作的呢,https使用了非对称加密的方式
具体步骤:
1.网站申请CA证书之后,将证书部署在nginx服务器,或直接部署在web应用服务器中;
2.用户请求https域名,本地没有证书的话需要去CA证书机构拿客户端证书;
3.每次请求,用户随意生成一个对称加密的秘钥,通过客户端的ca证书将秘钥加密后传递给服务端,服务端使用服务端ca证书进行解密,获得客户端传递的秘钥;
该步骤使用非对称加密传递对称加密的秘钥;
为什么这么做呢?之前已经提到了,虽然可以直接用非对称加密对所有数据传递进行加密,但是该方法效率较低,传输的数据量大时,会造成服务器计算压力;
4.客户端和服务端后边每次交互都使用客户端生成的秘钥,进行对称加密和解密;
客户端生成的秘钥是通过非对称加密传递的,中间即使有人拿到了加密串,也是无法解析;
这里的非对称加密是由算法保证了安全性,至今没有一个有效的算法能够解决大数分解质数的问题;
至此,客户端和服务端已经能愉快的使用https安全的进行数据交互了;