本文做者:茄果,专一前端开发领域,更多文章请关注知乎专栏《前端小事》html
如今打开各大知名网站,你有没有发现地址栏都已经加了个绿色的小锁?前端
是的,这就是https,这就是https的时代。web
然而,你了解https吗?算法
简单来讲,https就是套在SSL/TLS内的http,也就是安全的http。何为安全?一个安全的网络通讯环境要解决3个问题:浏览器
而https就是为了解决这3大问题而诞生的(准确来讲应该是ssl),下面分别看看这3个问题的解决方案。安全
通讯内容的保密须要经过加密来实现。咱们的互联网环境是很是透明的,通讯须要通过不少中转才能到接收方手中。这个情形有点像你上课的时候给第一排的小红递纸条同样,纸条上你确定不会直接写今夜三更操场见,而是机灵地写了老地方见。这个老地方只有你和小红知道,这样就算小明小李看到了纸条,他们也不知道老地方是图书馆仍是英语角,这就是加密,而老地方就是所谓的密钥。服务器
固然,这个例子并非很准确。简单来讲,加解密就是一个函数,而密钥则是这个函数的参数。好比咱们定义一个简单的加密函数,f(x)=x+b,x就是输入的明文,而b是密钥;解密函数就是加密函数的反函数,也就是g(x)=x-b。当不知道b的时候,你就算看到了密文也猜不出真实内容,这样就实现了加密。这种加解密都用同一个密钥,叫对称加密。网络
但这里有个问题,这里的参数b是怎么协商出来的?函数
你和小红能够花前月下约好b值,可是在真实网络环境中你和小红根本没有直接沟通的可能,全部沟通都要靠小明小李去传纸条的话,怎么作才能躲过他们呢?这里就须要用到非对称加密算法了,这种算法有公钥和私钥一对钥匙,公钥是全部人都能获取到的钥匙,私钥则是服务器私自保存的钥匙。非对称加密算法中公钥加密的内容只能用私钥解密,私钥加密的内容则只有公钥才能解密。因此当你使用小红的公钥加密你的纸条以后,帮你传递纸条小明小李等人看到纸条也没法读取内容了,只有拥有私钥的小红才能读出你的信息。网站
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法须要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。你可能比较好奇非对称加密算法的原理,可是我这里不展开讲算法,有兴趣的同窗能够自行搜索。
那么问题来了,小红给你的回应也想加密怎么办?
若是小红用她的私钥加密的话,班上全部人都知道公钥,而公钥能够解私钥的加密,也意味着全部人都能解密小红的回应消息。聪明的你必定想到了解决方案:利用非对称加密算法加密出一个对称密钥给小红,小红用她的私钥读取对称密钥,而后大家就用这个对称密钥来作对称加密,而后就能够愉快地约约约了。
固然,https也是这么干的。
加密以后貌似通讯过程就完美了?且慢,小红的公钥是怎么公告天下的呢?
要知道在网络环境中全部信息交互都是经过传纸条的方式来进行的,小红的公钥也不例外,万一在通过小明手里的时候被掉包了怎么办?怎么保证你手上的小红公钥是就是真正的小红公钥呢?看到班上的痴男怨女的纸条被各类掉包,文娱委员凤姐决定自告奋勇。凤姐想出了一个办法,全部加密通讯都要带上一本证,用来证实本身的身份。这本证是凤姐特地为班上全部单身狗作的,公钥就放在证书里面返回给纸条的发送者,证书里面除了公钥还有学号、人名、甚至星座身高三围等各类信息。证书上盖了一个大大的鉴定章,这是凤姐独有的章,表示证上的信息真实性由凤姐保证,看到这个章就能够认为对方是个真·单身狗。
经过这些信息你就能够知道对方是小红仍是如花了,这就是证书机制。
显然你会怀疑证书上凤姐的公章是有可能被伪造的,怀疑有理!因此证书上的公章也是非对称加密过的,加密方式跟上面提到的恰好相反:用凤姐的私钥加密,用凤姐公钥就能够解密,这样就能够鉴定证书的真伪。这个公章就是证书的数字签名,具体来讲就是先将证书用哈希算法提取摘要,而后对摘要进行加密的过程。另外你也能够直接拿着证书去找凤姐,凤姐就会帮你验证证书的有效性。(证书是有期限的,因此即便是真证书也会可能过时,须要注意)
这个机制看起来至关完善,可是咱们要以怀疑一切的态度去作安全机制,凤姐保证的东西是可信任的了。
可是,凤姐真的是凤姐吗???
因此,凤姐自己也要由证书来保证,凤姐的证书由班主任颁发,而班主任的证书由校长颁发……这个链一直到最权威的几个机构,这些机构在https体系中就是所谓的根CA。根是不可怀疑的权威,他们为本身带盐,本身证实本身是本身。在https证书体系里面,根证书是操做系统/浏览器自带的,咱们能够相信被这些机构认证的证书的,从而一层一层推导到凤姐这个级别。
另外,因为证书其实很容易作,地铁口10块一本,不管哈佛仍是斯坦福,通通10块!因此有些公司会本身作证书,根本不去找根CA机构,好比著名的12306。你也能够本身作证书放到网上让用户下载导入浏览器,但由于你没有凤姐的影响力,因此没人会相信你,固然也有人连凤姐都不相信……
密也加了,凤姐的公章也盖了,是否是这套机制就perfect了呢?
NoNoNo,想一下暗恋着你的小明看到你给小红传纸条,内心确定不爽,虽然看不懂可是仍是能够改密文呀。原本你是要约小红半夜三更操场见,结果小明删掉了前半部分的密文,解密后刚好变成了“操场见”,而后小红下课立刻往操场跑,而你却跑回宿舍好好洗了个澡。。。而后,而后小红就跟小明跑了~~
这种篡改通讯内容的场景相信你们都深有体会,咱们访问一些站点的时候平白无故就出现了运营商的广告,这都是运营商给加的!!因此内容的完整性也须要保证,这比较简单:先用哈希算法提取内容摘要,而后对摘要进行加密生成数字签名,验证数字签名就能够判断出通讯内容的完整性了。
以上就是https用到技术的简化版,一个http通讯流程以下:
大致步骤:
根据前文所述,在步骤3和步骤6都会使用摘要和签名算法来保证传递的证书和通讯内容不被篡改。经过这个流程能够看出,https的核心在于加密,尤为是非对称加密算法被屡次使用来传送关键信息。
理解了加密,认识到网络的透明性,抱着怀疑一切的态度,理解https这套体系就变得简单了。
最近在系统地重温http相关的东西,这一篇先介绍了https的基本原理,才疏学浅,文中有不当之处,还望斧正!后续会介绍实际应用、静态服务器的配置等~
若是有人劫持了你的dns服务器,将wwe.icbc.com解析到他的非法网站,或者代理服务器将你导向他的非法网站去,这都是中间人攻击。若是没有https,那么攻击就这样发生了。那https怎么避免这类攻击?
答案是经过证书鉴别。
在申请证书的时候CA会对所要申请的域名进行控制权认证,因此你是不可能用隔壁老王的网站来申请证书的。就算你黑了他的站点,只要老王去申请证书就能发现了。
若是伪造一个证书,这个证不是权威CA签发的,那么浏览器检查的时候会报警提示用户证书非法。固然用户仍然能够继续操做,好比抢火车票什么的。。
若是你把真正站点的证书搞下来,证书上的域名不变,只是将公钥替换掉,那么浏览器比对证书数字签名的时候就能发现对不上了,二话不说,报警。
若是中间人直接用www.icbc.com的真实证书,那么他虽然能收到客户端的消息,可是没法解密,因此也没法响应客户端的请求,攻击无效!
以前对哈希算法和数字签名了解很少,了解以后发现其实原理仍是挺简单的。哈希算法能够将大量的数据转换成定长的摘要,并且摘要是与输入对应的,输入变化后摘要也会发生变化。因此对数据应用哈希算法求出摘要,比对摘要就能够判断数据是否被篡改过了。证书使用了私钥加密摘要,而后客户端就能够用公钥解密获得摘要,对比哈希算法算出来的摘要就能够判断证书是否被篡改过。另外一方面,由于公私钥是成对的,篡改后的证书虽然能求出摘要,可是没法加密出签名,因此摘要和加密组合使用就能够保证证书的真实性了。这里的私钥是证书的发证机构的私钥,也就是CA链上CA加密用户服务器证书,上级CA加密下级CA的证书,从而造成一个信任环。
本文做者:茄果,专一前端开发领域,更多文章请关注知乎专栏《前端小事》
原创文章,转载请注明出处!本文连接:http://www.cnblogs.com/qieguo/p/6280292.html