什么是Https------------Http安全版(http下加入SSL层)就是HTTP的安全升级版
Http协议的客户端和服务端通信采用的是明文(post请求也只是将数据放在header中,但依然是明文传输。而Hppts协议的客户端和服务端间通信采用的秘文传输(对称加密和非对称加密相结合)
Https的作用:内容加密建立一个信息安全通道,来保证数据传输的安全;身份认证确认网站的真实性;数据完整性防止内容被第三方冒充或者篡改
Https的劣势:对数据进行加解密决定了它比http慢;需要进行非对称的加解密,且需要三次握手。首次连接比较慢点,当然现在也有很多的优化。出于安全考虑,浏览器不会在本地保存HTTPS缓存。实际上,只要在HTTP头中使用特定命令,HTTPS是可以缓存的。
Firefox默认只在内存中缓存HTTPS。
但是,只要头命令中有Cache-Control: Public,缓存就会被写到硬盘上。
IE只要http头允许就可以缓存https内容,缓存策略与是否使用HTTPS协议无关。
HTTPS和HTTP的区别(http是明文传输,端口:80,https是加密传输,端口:443)
https协议需要到CA申请证书。
http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
http默认使用80端口,https默认使用443端口
网络基础的同学都知道,HTTP是应用层协议,位于HTTP协议之下是传输协议TCP。TCP负责传输,HTTP则定义了数据如何进行包装。
传输加密的流程:原先是应用层将数据直接给到TCP进行传输,现在改成应用层将数据给到TLS/SSL,将数据加密后,再给到TCP进行传输。
HTTPS是如何加密数据的:
握手认证:客户端一次请求-——-服务端返回数字证书—————客户端生成对称密匙
客户端发起一次请求后,服务端返回数字证书,客户端接受到后,生成一个对称密钥,再用服务器下发证书中的公钥对其加密并发送,服务端接受到客户端发送的加密后的对称密钥后用自己的私钥解密,获得对称密钥。到此服务端和客户端都拥有了可以用来加密数据的对称密钥,并且可以保证该密钥没有泄漏。
传输阶段————客户端和服务端用上面得到的对称密钥将数据加密后正常传输。
数字签名与摘要
简单的来说,“摘要”就是对传输的内容,通过hash算法计算出一段固定长度的串(是不是联想到了文章摘要)。然后,在通过CA的私钥对这段摘要进行加密,加密后得到的结果就是“数字签名”。(这里提到CA的私钥,后面再进行介绍)
明文 -->hash运算--> 摘要 --> 私钥加密 --> 数字签名
结合上面内容,我们知道,这段数字签名只有CA的公钥才能够解密。
接下来,我们再来看看神秘的“证书”究竟包含了什么内容,然后就大致猜到是如何对非法证书进行预防的了。
HTTPS其实是有两部分组成:HTTP +SSL/ TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。
1. 客户端发起HTTPS请求—————浏览器里输入一个https网址,然后连接到server的443端口
2. 服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
3. 传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4. 客户端解析证书————————先验证证书,没问题的话生成随机值,用证书加密
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5. 传送加密信息——————其实是证书加密后的随机值
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6. 服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7. 传输加密后的信息————————私钥加密
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原
8. 客户端解密信息-——————私钥解密得到内容
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。