详解HTTPS
2018-02-09 21:24
176 查看
说明
在之前的博文《了解HTTP和HTTPS》中,已经介绍了HTTP和HTTPS的特点,在阅读了《图解HTTP》一书后,对HTTPS有了详细的了解,在这里进行总结。正文
在了解HTTPS之前,我们先要清楚,为什么要使用HTTPS?字面上HTTPS比HTTP多一个字母S,这个字母代表什么含义,给HTTPS带来了什么特性?这些特性是怎么实现的?为什么使用HTTPS?
在互联网进行通信,我们的信息受到了极大的安全威胁。通常我们使用HTTP协议进行通信时,HTTP的不足就会产生安全问题,因此更为安全HTTPS的出现逐渐代替HTTP(谷歌极力推广HTTPS,从今年7月起,Chrome浏览器将在地址栏把所有HTTP网址标示为不安全网站)HTTP的不足:
1.通信使用明文(不加密),内容可能会被窃听2.不验证通信方的身份,因此有可能遭遇伪装
3.无法证明报文的完整性,所以有肯可能已遭篡改
加密防止窃听
加密有两种方式:通信加密
HTTP通过和SSL(Secure Socket Layer, 安全套套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容
内容加密
对HTTP协议传输的内容进行加密。在通信时,客户端必须对传输的报文主体进行加密,所以要求客户端和服务器同时具备加密和解密机制
身份验证
HTTP协议中的请求和响应不会对通信方进行确认。这就造成了极大的问题,如无法判断服务器,客户端,无法进行权限的判断,无法阻止海量请求下的拒绝服务式攻击即DOS攻击HTTP使用SSL确认通信方,SSL不仅提供了加密处理,而且还使用了一种被称证书的手段进行身份确认
报文完整性
HTTP协议无法证明通信的报文的完整性(即准确度,无法确定报文就是初始发出的报文),所以当请求或响应的内容遭到篡改,也无法获悉。当报文在传输的过程中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Main-in-the-Middle attack MITM)常使用MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法来确定报文的完整性
HTTP+加密+认证+完整性保护=HTTPS
SSL提供认证和加密处理及摘要功能,所以HTTP+SSL=HTTPS(HTTP Secure)或 HTTP over SSL。那s代表了Secure,就是给HTTP添加了加密及认证机制,那这些特性是怎么实现的?
SSL如何使用?
通常,HTTP直接和TCP通信,当使用SSL时,则变成了HTTP先和SSL通信,再由SSL和TCP通信注意:SSL是独立于HTTP的协议,不光是HTTP协议,其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用
了解加密技术
共享密钥(对称密钥)加密顾名思义,“共享”就是大家都使用同一个密钥进行加密解密,当传输时也必须把密钥传给对方,这就造成密钥传输的安全问题,如果密钥被窃取,那么加密就变得毫无意义
公开密钥加密(非对称密钥)加密
SSL采用了公开密钥加密的方式
公开密钥加密使用了两把密钥,所以称为非对称,一把为私有密钥(private key),另一把为公有密钥(public key)。其中“私有密钥”,就保证了只有持有者才能使用该密钥解密,读取信息,这就保证了安全。具体方式:
发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己私有密钥进行解密
HTTPS采用两种混合加密的方式
HTTPS采用共享密钥加密和公开密钥加密并用的混合加密机制因为公开密钥加密处理速度比共享密钥慢,为充分利用两者的优势,HTTPS组合使用。具体方式为:在交换密钥的环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式
HTTPS的身份认证
通过上面的介绍,我们已经知道了HTTPS的加密机制,但是我们怎么能确定正在进行加密通信的服务器就是我们想要的呢?这就需要使用由数字证书机构CA和其他相关机构颁发的公开密钥证书具体使用:
1.由服务器向数字证书机构提出公开密钥的申请
2.数字证书机构在做了身份查证后,对申请的公开密钥进行数字签名,然后分配这个以签名的公开密钥,并将这个密钥放入公钥证书后绑定在一起。
3.服务器就会将数字证书机构颁发的公钥证书发送给客户端
4.客户端使用数字证书机构的公开密钥对服务器的公钥证书的数字签名进行验证,进行身份验证
在第4步中,客户端如何安全地获得认证机构的公开的密钥呢?通常情况下,在多数浏览的内部已经事先植入了常用的认证机关的公开密钥
HTTPS的安全通信机制
上面已经介绍了HTTPS的安全特性使用的技术,最后介绍HTTPS实现安全通信的步骤首先,进行的是SSL第一次握手协商
1.客户端发送Client Hello报文与服务器进行SSL通信,报文中指明了客户端支持的SSL的版本,加密组件(加密算法及密钥长度)
2.服务器可以进行SSL通信时,以Server Hello报文作为回应,报文中也包含了SSL版本及加密组件
3.紧接着服务器发送Certificate报文,将自己的公开密钥证书发给客户端
4.服务器发送Server Hello Done报文通知客户端,握手部分结束
接下来,继续握手,使用了公开密钥
5.SSL第一次握手结束后,客户端发送Client Key Exchange报文回应,报文中包含使用服务器公开密钥加密的一种被称为Pre-master secret的随机密码串,这个密码串十分重要,它作为后面通信的共享秘钥
6.接着客户端继续发送Change Cipher Spec报文,该报文提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密
7.客户端继续发送Finished报文,此报文包含了之前所有报文的整体校验值,服务器能否正确的解密该报文决定了此次握手协商是否成功
8.服务器同样发送Change Cipher Spec报文
9.服务器同样发送Finished报文
10.服务器和客户端的Finished报文交换完毕后,SSL连接建立完成,通信加密完成受到SSL的保护,之后进行应用层的通信,即发送HTTP请求
最后,进行HTTP通信
11.应用层通信,发送HTTP响应
12.最后由客户端断开连接,发送close_notify报文,之后进行TCP的四次挥手断开连接
那如何确认报文的完整性呢?
在以上的流程中,应用层发送数据时,会附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性
总结
通过以上流程,我们知道了HTTPS通信时先建立SSL连接,使用公开密钥加密方式传输客户端生成的随机密码串,之后的通信都以随机密码串为密钥进行共享密钥通信,在发送数据时,使用MAC的报文摘要保证了报文的完整性
流程图解
相关文章推荐
- 详解https是如何确保安全的?
- SSL协议详解——SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
- java ssl https 连接详解 生成证书
- HTTP协议和HTTPS协议详解
- 详解HTTPS加速原理
- Http和Https详解
- 详解HTTPS
- 强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)
- 图解HTTP之HTTPS详解
- 图文详解 -- HTTPS站点的SSL证书 ,扩展SSL证书,密钥交换和身份验证机制汇
- Apache中https的详解及应用案例
- 转载:HTTP和HTTPS详解
- HTTP协议和HTTPS协议详解
- HTTPS详解SSL/TLS
- 详解https是如何确保安全的?
- HTTPS详解
- https详解
- 【上】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS
- HTTP,HTTPS和HSTS详解
- 详解Nginx服务器和iOS的HTTPS安全通信