HTTPS协议
HTTPS协议的本质就是在原有HTTP协议的基础上引入一个加密层 ,对http报文进行加密
密钥
1.加密就是把 明文进行一系列变换, 生成 密文.
2.解密就是把 密文再进行一系列变换, 还原成 明文.
3.在这个加密和解密的过程中, 往往需要中间数据 辅助进行这个过程, 这样的中间数据称为 密钥
运营商劫持
我们在浏览器上找到一个网址,准备下载天天动听,点击下载后,浏览器发送一个http请求,经运营商路由器,最后到达服务器,服务器封装好http响应,再发回去,运营商路由器接收到后因为响应是明文的,所以可以修改响应,把天天动听的下载链接改成qq浏览器下载链接。甚至于运营商还可以直接把http请求报文给改了,那这样直接访问的就是其他的服务器
对称加密和非对称加密
对称加密
对称加密使用单密钥的加密方法,使用同一个密钥来进行加密和解密
特点:计算量小速度快
非对称加密
非对称加密使用两个密钥来进行加密和解密,这两个密钥一个是公钥,一个是私钥,既可以使用公钥加密,私钥解密,也可以是私钥加密,公钥解密
特点:计算量大速度慢
数据摘要(数据指纹)
数据摘要是利用散列函数对信息进行运算得到的一串固定长度的数据
作用:摘要是用来判断信息有没有被篡改,哪怕只是很小的改动,生成的摘要差别也会很大
数字签名
使用密钥将数据摘要进行加密得到的密文就是数字签名
HTTPS加密层设计探究
加密层要解决两个问题:
1.报文不能被窥看
2.报文不能被篡改
**方案****1 -**只使用对称加密
服务器将对称密钥以http明文的方式发给浏览器,那中间的那些路由器都可以得到密钥了,所以保证不了安全
**方案****2 -**只使用非对称加密
服务器将非对称密钥的公钥以http明文的方式发给浏览器,中间人得到公钥了,浏览器给服务器发的http报文会公钥加个密,那中间人无法窥看,但可以伪造,因为中间人也有公钥可以加密一个新http报文,服务器给浏览器的http报文会用私钥加密,中间人有公钥可以解密,可以查看、可以修改,安全不了一点,效率也慢
**方案****3 -**双方都使用非对称加密
服务器端有公钥S和私钥S',客户端有公钥C和私钥C',客户端和服务器都明文交换公钥,然后中间人就同时有了这两个公钥,客户端给服务器发消息,其http报文会用服务器公钥S加密,然后中间人没有服务器私钥,无法查看密文但可以伪造,服务器给客户端发消息同理,中间人无法查看但可以伪造,不安全,而且效率也很慢
方案 4 -非对称加密+ 对称加密
情况一:成功接收到了服务器公钥
服务器端有非对称密钥,将包含公钥的http明文发给客户端,假设客户端和中间人都成功拿到了服务器公钥,然后客户端用服务器公钥将包含客户端对称密钥的http报文加密,发给服务器,中间人此时没有服务器私钥无法查看密文,但可以伪造,将含中间人对称密钥的http报文用服务器公钥加密,发给服务器,那服务器用中间人对称密钥加密发送确认应答响应,中间人没有客户端对称密钥,因此没法给客户端应答,那客户端收不到响应就不继续走下去,不发送真正的数据,而是重新发送由服务器公钥加密后的包含客户端对称密钥的报文,那中间人攻击就失败了,假如中间人没有伪造,那服务器用服务器私钥解密,得到客户端对称密钥,然后用客户端对称密钥加密http响应,中间人这时既无法修改也无法查看,彻底失败
情况二:接收到的不是服务器公钥(中间人从服务器给公钥时就开始攻击)
服务器将含服务器公钥的http明文发送,然后中间人拿到服务器公钥后,直接伪造明文,将公钥弄成中间人的,发送给客户端,客户端用中间人公钥加密包含客户端对称密钥的http报文,发送出去,中间人用中间人私钥解密,拿到了客户端对称密钥,然后中间人用服务器公钥再将明文进行加密,发送给服务器,服务器用服务器私钥解密,拿到客户端对称密钥,但此时中间人也拥有客户端对称密钥,可随意修改和查看服务器和客户端的http报文
总结:我们可以得知,非对称密钥加对称密钥的加密层设计的关键是 客户端拿到的公钥得是服务器公钥
如何保证客户端收到的公钥是服务器公钥?答案是通过证书这个东西
证书
服务器在使用 HTTPS 前,需要向 CA 机构申请一份数字证书,证书是用来保证客户端收到的公钥是服务器公钥
证书组成
证书是由明文信息和数字签名两部分组成的
申请流程
服务器需要搞一个CSR文件,里面有服务器公钥、申请者信息、域名,然后将CSR文件给CA机构,CA机构检验后,除了CSR文件的内容外,还会加上签发机构、有效时间,共同组成证书的明文信息部分,然后CA机构会用摘要算法对明文信息进行运算,得到数据摘要,接着用CA私钥加密摘要,得到数字签名,明文信息和数字签名就组成了证书,然后将证书给到服务器
HTTPS协议加密层设计
https协议对加密层的最终设计方案是采用非对称密钥、对称密钥、证书认证结合的策略
下面展示详细过程:
当浏览器和服务器完成传输层级别的三次握手建立连接后,会进行应用层级别的TLS握手,浏览器发送请求,服务器以明文方式发送证书,中间人像之前一样在一开始就进行攻击,把证书里面的明文信息中服务器公钥修改成中间人公钥,然后给到客户端,客户端会查看证书明文的签发机构,然后知道对应的CA公钥和摘要算法是什么,对证书明文信息使用摘要算法得到摘要,然后用CA公钥将证书中的数字签名解密,得到摘要,对比两个摘要,一看不一样,那就把证书丢弃,重新发送请求。假如中间人没攻击,那客户端收到证书后并验证无误后,会用服务器公钥将包含客户端对称密钥的http报文加密,然后发送,服务器收到后用服务器私钥解密,然后得到客户端对称密钥,用客户端对称密钥加密响应报文,发送给客户端,客户端收到并解密确认无误后,TLS握手结束,https协议加密层的通信密钥(客户端对称公钥)就确定下来,开始发送包含真正数据的http报文,并用公钥进行加密
总结:共涉及三对密钥,CA非对称密钥,服务器非对称密钥,客户端对称密钥