1.http协议的缺点
(1)通信使用明文,内容可能被窃听(重要密码泄露)
(2)不验证通信方身份,有可能遭遇伪装(跨站点请求伪造)
(3)无法证明报文的完整性,有可能已遭篡改(运营商劫持)
2.https
https是在http协议基础上加入加密处理和认证机制以及完整性保护,即http+加密+认证+完整性保护=https,https不是应用层的一种新协议,只是http通信接口部分用SSL/TLS代替而已。通常http直接和TCP通信,当使用SSL时则演变成先和SSL通信,再由SSL和TCP通信。所谓https,其实就是身披SSL协议层外壳的http
(1)SSL/TLS是什么?
SSL(安全套接层),位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
SSL记录协议:它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议:他建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
(2)对称秘钥加密和非对称秘钥加密
对称秘钥加密,又称私钥加密,即信息的发送方和接收方用同一个密钥加密和解密数据。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
非对称密钥加密,又称公钥加密,他需要使用一堆密钥来分别完成加密和解密操作,一个公开发布,即公开密钥,另一个由用户自己秘密保存,即私用密钥。信息发送者用公开密钥去加密,而信息接收者则用私钥去解密。
从功能及爱都而言非对称加密比对成加密功能强大,但加密和解密速度却比对称密钥加密慢得多。
(3)SSL/TLS协议的基本思路是采用公钥加密算法,也就是说,客户端先向服务器索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密,但是这里有两个问题:
(1)如何保证公钥不被篡改?
解决办法:将公钥放在数字证书中,只要证书是可信的,公钥是可信的。
(2)公钥加密计算量太大,如何减少好用的时间?
解决方法:每一次对话(session),客户端和服务器端都会生成一个对话密钥(session key),用它来加密信息。由于“对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密“对话密钥”本身,这样就减少了加密运算的消耗时间。
SSL/TLS协议的基本过程是这样的:
(a)客户端向服务器端索要并验证公钥;
(b)双方协商生成“对话密钥”;
(c)双方采用“对话密钥”进行加密通信;
HTTPS工作原理
1.客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到服务器的443端口。
2.服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用收信人的公司申请的证书则不会弹出提示页面。
3.传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、证书版本、序列号、签名算法标识符、签发人姓名、有效期、公钥信息等并附有CA的签名。
4.客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验;
(2)浏览器开始查找擦偶偶系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的
(4)如果找到,那么浏览器就会从操作系统中取出颁发者CA的公钥(多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥),然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书核发,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密。
5.传送加密信息
这部分传送的是用证书加密后的随机值(私钥),目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加解密了。
6.服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密
7.传输加密后的信息
这部分信息是服务端用私钥加密后的信息,可以在客户端被还原
8.客户端解密信息
客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容,整个过程第三方即使听到了数据,也束手无策。
HTTP和HTTPS区别:
(1)https协议需要到ca申请证书,一般免费证书比较少,因而需要一定费用
(2)http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议
(3)http和https使用的完全不同的连接方式,用的端口也不一样,http的端口号是80,https的端口号是443.
(4)http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
7.常见的http状态码