引言
我们在一些浏览器的地址栏可以看见有些网站显示安全,有些网站显示不安全,那么什么是安全的?什么是不安全的?在2017年1月发布的Chrome 56浏览器开始收集密码或信用卡数据的HTTP页面标记为"不安全",用户使用Chrome 62,带有输入数据的HTTP页面和所有以无痕模式浏览的HTTp页面都会被标记"不安全",此外,苹果公司强制所有IOS APP在2017年1月1日使用HTTPS加密
HTTP和HTTPS发展史
什么是HTTP?
HTTP超文本传输协议,是一个基于请求响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有www文件都必须遵守这个协议.设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法.
版本 | 产生时间 | 内容 | 发展现状 |
---|---|---|---|
HTTP/0.9 | 1991年 | 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 | 没有作为正式的标准 |
HTTP/1.0 | 1996年 | 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 | 正式作为标准 |
HTTP/1.1 | 1997年 | 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 | 2015年前使用最广泛 |
HTTP/2 | 2015年 | 多路复用、服务器推送、头信息压缩、二进制协议等 | 逐渐覆盖市场 |
什么是HTTPS
HTTPS是一种通过计算机网络进行安全通信的网络传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包.HTTPS使用的主要目的是提供对网站服务的身份认证,同时保护交互数据的隐秘与完整性
PS: TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不分
HTTP 和 HTTPS区别
HTTP特点:
- 无状态: 协议对客户端没有存储状态,对事物处理没有记忆能力,比如访问一个网站需要反复进行登录CEO做
- 无连接: HTTP/1.1之前,由于无状态的特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接.
- 基于请求和响应: 基本的特性,有客户端发起请求,服务券响应
- 简单,灵活
- 通信使用明文,请求和响应不会对通信方进行确认,无法保护数据的完整
HTTPS特点:
基于HTTP协议,通过SSL或LTS提供加密处理数据,验证对方身份以及数据完整性保护
- 内容加密: 采用混合加密技术,中间者无法直接查看明文内容
- 验证身份: 通过整数认证客户端访问的是自己的服务器
- 保护数据完整性: 防止传输的内容被中间人冒充或篡改
**混合加密:**结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
**数字摘要:**通过单向hash函数对原文进行哈希,将需
加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。
**数字签名技术:**数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。
- 收方能够正式发送方真实身份;
- 发送方事后不能否认所发送过的报文;
- 收方或非法这不能伪造,篡改报文;
HTTP通信传输
客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接.HTTP属于TCP/IP模型中的应用层,所以通信的过程其实是对应数据的入栈和出栈
报文从应用层传输到传输层,传输层通过TCP三次握手和服务器建立连接,四次挥手释放连接
HTTPS实现原理
SSL建立连接过程
- client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。
- server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。
- 随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
- 客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥)。
- 客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。
- 传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
- 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。
- 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
- 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。
运用与总结
安全性考虑:
- HTTPS的加密范围比较有限,在黑客攻击,拒绝服务攻击,服务器劫持等方面几乎起不到什么作用
- SSL整数的信用链体并不安全,特别是在某些国家可以控制CA整数的情况下,中间人攻击一样可以
成本考虑:
- SSL整数需要购买申请,功能强大的整数费用越高
- SSL证书通常需要绑定IP,不能在同一个IP上绑定多个域名,IPv4资源不可能支撑这个消耗
- 根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。
- HTTPS连接缓存不如HTTP高效,流量成本高。
- HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
- HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。