HTTPS加解密原理
HTTP(Hypertext Transfer Protocol)超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议,可以说 HTTP 是当代互联网通信的基础。
但是HTTP在传输数据时信息都是明文的,没有经过任何加密,而这些明文数据会经过WiFi、路由器、运营商、机房等多个物理设备节点,如果在这中间任意一个节点被监听,传输的内容就会完全暴露,因此很容易出现数据被监听和窃取的情况。
为了解决HTTP明文传输数据可能导致的安全问题,1994年网景公司提出了HTTPS(HyperText Transfer Protocol Secure)超文本传输安全协议,数据通信仍然是HTTP,但利用SSL/TLS加密数据包。
HTTPS工作流程
1.用户在客户端发起HTTPS请求,HTTPS需要使用一套CA数字证书,证书内会附带一个公钥Pub,而与之对应的私钥Private保留在服务端不公开。
2.服务器收到请求,返回配置好的包含公钥Pub的证书给客户端。
3.客户端收到证书,校验合法性,如果不通过,则显示HTTPS警告信息,如果通过则继续。
4.客户端生成一个用于对称加密的随机Key,并用证书内的公钥Pub进行加密,发送给服务端。
5.服务器收到随机Key的密文,使用与公钥Pub配对的私钥Private进行解密,得到客户端真正想发送的随机Key;
6.服务器使用客户端发送过来的随机Key对要传输的HTTP数据进行对称加密,将密文返回客户端;
7.客户端使用随机Key对称解密密文,得到HTTP数据明文;
8.后续HTTPS请求使用之前交换好的随机Key进行对称加解密。
上述流程中客户端和服务器之间先进行了一次非对称加解密(1-5),再进行了对称加解密(6-8)。
对称加密是指有一个**,用它可以对一段明文加密,加密之后也只能用这个**来解密得到明文。但是在互联网上传输,服务器和众多客户端之间不可能事先商量好**,如果事先商量好,那相当于对于监听者也是商量好的,那就达不到加密的效果,因此需要一次非对称加密。
非对称加密
讲一个比较通用的非对称加密算法RSA算法,首先要选择两个大的素数,记为p和q。根据当今求解大数因子的技术水平,这两个数应该至少有200位。然后计算n=pq,再选一个较小的奇数e,e和(p-1)(q-1)没有公约数。再寻找一个d,使得(ed)mod(p-1)(q-1)=1。以P(e,n)作为公钥,以S(d,n)为私钥。
简单的来说,就是p*q=n的计算是比较方便的,而讲n分解成两个大素数的乘积是极其耗时的。公钥中包含了乘积和一个奇数e,私钥里包含了一个因子,单从乘积是无法得到因子的。
单向函数就是在一个方向上能够很容易算出结果,但反向推导则是不切实际的函数,乘法就是一个单向函数。因此单相函数可以用来作为加密的手段。
CA数字证书
监听者虽然没有私钥,但是他依然可以截获服务器的公钥,并改成自己的公钥,然后客户端使用假的公钥加密,最后被监听者解密。那监听者依然可以得到客户端的数据。
出现这一问题的原因是客户端无法确认收到的公钥是不是服务器发来的。为了解决这个问题,互联网引入了一个公信机构,这就是CA。服务器在使用HTTPS前,去经过认证的CA机构申请颁发一份数字证书,数字证书里包含有证书持有者、证书有效期、公钥等信息,服务端将证书发送给客户端,客户端校验证书身份和要访问的网站身份确实一致后再进行后续的加密操作。
总结
HTTPS 解决了HTTP明文传输时信息被篡改和监听的问题。
为了兼顾性能和安全性,使用了非对称加密+对称加密的方案。
为了保证公钥传输中不被篡改,借助CA机构保证了HTTPS证书的公信力。