引言
现在由于人们的安全意识越来越强了,对于互联网这个尤其走在时代前列的新宠来说,加密工作势在必行,现在很多公司和单位都在使用HTTPS,当然这个要看业务的具体情况。说到HTTPS,我们肯定就会提到加密算法,这个在本文的后面会做一个简单的阐述,本篇文章我会分为两个部分来讲解,第一个部分通过一个简单生动的故事来让门外汉都能理解HTTPS加密是什么以及重要性;第二个部门对HTTP和HTTPS做一个比较,加深一下理解;
HTTPS的故事
1 愉快的玩耍时光
故事的主人公我们称作露西和莉莉吧,露西和莉莉是好朋友,几乎无话不谈,大学毕业后就异地相隔,不在一个城市,但是每天都会通过网络聊天,聊着各自身边发生的搞笑故事,互相分享着学习和工作,就这样愉快的时光一天一天的过去了,一切都是这么的美好
2 聊天隐私被泄露的隐患->对称加密
愉快的时光总是很短暂的,马上她们发现了问题。
有一天网络聊天,露西对莉莉说,咱们两个聊天的内容犹如在大街上,我向你大声说话一样谁都能听到,一点安全性都没有,这样咱们俩的一些私密话题岂不是被人发现了,很尴尬的,上次还让你帮我买…呢,太尴尬了,怎么办才好呢,以后的聊天我可不想还这么裸奔式的被别人看到。
露西相了想说,要不咱们两个商量一个加密的方式,每次聊天的时候使用这种方式进行加密,你发给我之后,我再使用相同的方式进行解密,这样就算别人看到了,因为没有秘钥,也不知道是什么意思不就好了吗,perfect。但是问题又来了,露西说:”我要怎么将这个秘钥给你呢,我现在发给你的话,别人也会截取到的啊,最后不还是白白浪费功夫?”,这时候莉莉提议说:”我这几天会去你所在的北京出趟差,到时候咱们俩见面的时候你将秘钥给我,这样的话秘钥别人就不知道了,也就保证了咱们俩聊天内容传输的安全性能了”,还是这么的完美,简直太聪明了,就这样露西和莉莉以后的聊天果然就安全多了,没有被一双眼睛盯着看一样。这个过程类似于下图:
但是,因为露西的朋友是在是太多了,秘钥又是双方都得知道的,不可能每个朋友都要去所在的城市给她一个秘钥吧?这样不太方便也不太现实,看来还得想新的解决办法啊。
3 RSA非对称加密算法
有一天,露西突然在网上看到了RSA加密算法,就深入研究了一下,这个RSA加密算法就比较有意思了,它是由一对儿钥匙组成的,其中一个是公钥,就是对所有人都公开的,另外一个是私钥,就是严格保密的,只有自己知道,泄露的话就会有信息泄露的风险。这里公钥加密的数据只有私钥可以解开,私钥加密的数据只有公钥能够解开。
这样的话当莉莉给露西发消息的时候就使用露西的公钥对消息加密,因为公钥是公开的,等到露西收到消息的时候,就使用仅仅自己知道的私钥去解密即可得到消息,简直不要太完美。
当露西要给莉莉发消息的时候相反的,使用莉莉的公钥加密,当莉莉接到消息后就使用自己的私钥进行解密即可得到消息内容,这样的话就解决了消息被窥探的风险。
4 RSA非对称加密算法+对称加密算法
过了一段时间,露西发现使用RSA加密传输数据是在是太慢了,效率比起对称加密来说慢了可不止一点半点啊,要不是因为安全性高的话,早就放弃这个加密方式了,突然一个念头出现在她的脑海里,可不可以将两种加密方式结合一下,取其精华,剔除糟粕,完美的结合一下,简单来说是这样的,首先我生成一个对称加密的秘钥,使用RSA的方式发送给莉莉;然后就摒弃这种传输方式使用刚才传输的秘钥使用对称加密的方式进行加密传输,这样即安全还快速。露西赶紧把这个想法告诉了莉莉,然后莉莉对露西的想法连连称赞,这样的话不仅解决了RSA传输慢的问题,还解决了对称秘钥的传输问题,一举两得。使用这样的方式之后果然效率大大的提高了。
5 RSA公钥泄露
经过了一段时间之后,有一天露西又发现问题了,露西可真是学无止境啊。
露西告诉莉莉说:“我给你发公钥的时候,如果有一个中间人劫持了我给你发的公钥,也劫持了你给我发的公钥,都替换成了自己的公钥,这个是完全可能的,那么我使用莉莉你的公钥加密消息发送给你的时候,其实是使用的这个中间人的公钥加密的消息,那么这个人就可以使用自己的私钥解密消息,然后再使用你的公钥加密消息发送给你,当你收到消息的时候使用自己的私钥解密消息,一切看似正常,但是实际上你却不知不觉中被人玩弄于鼓掌之中,消息还是照样泄露了,太可怕了,反过来你给我发消息也一样”。莉莉听完手心直出汗,怎么到处都是窥探狂啊,真的是快抓狂了。
其实说了这么久,好像还是回到了最原始的位置,类似于聊天内容被泄露一样,真的是让人痛不欲生啊。公钥虽然公开,但是不代表就是安全的,看来还需要做点什么加密措施才行啊。
6 RSA公钥泄露之解决方法
下面讲一个小故事作为插曲,更加深刻的理解接下来要讲解的数字签名和数字证书等内容。
假如有两个公司,分别是A公司和B公司(这两家公司关系很好,有业务往来),有一天A公司的小张要去B公司办事,但是B公司的人都不认识小张,这怎么办呢?就用我们最常用的方法,A公司开一封介绍信盖上公章让小张带去到B公司,这样的话B公司的接待人员看到小张带来的介绍信有A公司的公章(前提是这个公章是真的,并且接待人员认识这个公章)就会明白小张是我们合作伙伴A公司的人,就会热情款待,事情办理起来就会很好办理。
但是问题也来了如果有别的公司也和这个B公司有业务往来,而且是很多公司,那么这个时候B公司的接待人员不可能都记得每个去B公司办事的人的公司的公章,因为有的人可能盖的公章是假的,这就会给坏人以可乘之机,这个时候如何是好呢?这个时候就会想到,生活中经常使用的方法,找一个权威的第三方大家都信任的平台比如说是C公司,让C公司出面给你办理一个证明,比如说给A公司办理一个证明文件也就是后面要说到的数字证书,数字证书里面包含的东西是A公司的公章和最重要的C公司的公章。OK
以后A公司的办事人员去B公司办事的时候带的东西就会增加一样,除了之前的一份介绍信盖有A公司的公章之外,还得带一份类似于数字证书的文件,这个文件包含了A公司的公章和C公司的公章,那么大家看起来可能会说这不是更加复杂了吗,文件也增多了一份,是的,表面看确实是复杂了点,但是逻辑简单了,也更加安全了,这样的话以后B前台的接待人员只需要核对两样东西即可,第一样看是否带有公信度比较强的C公司的公章,第二样核对A公司的两个公章是否一样即可,为什么呢?因为带有C公司公章的那个A公司的公章肯定是真的,只需要看仅仅盖有A公司的章的那份介绍信的公章是否和上面的盖有A和C两家公司的公章的A公司的公章一样即可,这样不仅安全,还大大减少了B公司接待人员的工作量。
说到这里,我们回过头来看看上面的问题,露西和莉莉的公钥被中间人劫持,这不就是公钥的泄漏问题吗,我们可以按照上面的故事,找一个第三方认证度比较高的中心(其实就是CA,是Certificate Authority的缩写,也叫“证书授权中心”)做一个公正,开具一个证书(比如给露西办理一个证书),证明里面包含了露西的基本个人信息,最重要的还包含露西的公钥,只要拿到露西的证书就能得到露西的公钥,但是怎么保证证书传递的过程中不会被篡改呢?这里我们有一个方法就是使用数字签名。
数字签名是非对称密钥加密技术与数字摘要技术的应用,这里的数字摘要算法百度百科是这么说的:将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单向Hash函数将需要加密的明文“摘要”成一串固定长度的密文这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。
这种加密方式具有三个特点,(1)唯一性:指的是一段固定的数据,它使用Hash算法加密后的生成的摘要是唯一的;(2)伪随机性:指的是看似生成的摘要是随机的十六进制数据,但是如果数据源有一丁点变化,生成的摘要就会有千差万别,正所谓失之毫厘谬以千里;(3)不可逆转性:这个算法是不能逆转破解的,最起码到将来的一段时间之内是无法破解的。一般来说最常用的MD5加密算法,生成的摘要有32位的,也有16位的,区别很简单,16位是32位取中间9-24位构成的,所以说起来16位还比32多了一个操作步骤呢。
接着上面的说,使用了消息摘要算法后,我们将包含露西的基本信息和公钥的文件进行消息摘要后生成一个不可逆转的唯一摘要,然后对这个摘要使用使用CA的私钥加密生成一个数字签名,得到数字证书:
这样的话当露西给莉莉发送证书,当莉莉得到证书的时候,莉莉需要做两步骤进行验证,(1)对证书使用消息摘要算法生成摘要摘要A(2)使用CA公钥将对数字签名进行解密,生成一个摘要B,将这两个摘要进行比较,一模一样的话就证明露西的公钥没问题了。其实上面的C公司就相当于这里的CA机构了,C公司给A公司开具的证明就是数字证书啦。
但是这里还有一个问题,怎么保证CA的公钥不会被上面类似于中间人截取呢?这个问题就得看你自己了,我们要通过安全的通道获取CA的公钥,还有就是要信任这个CA即可。这里我们简单讲解一下根证书和证书之间的信任关系和信任链,这里可以把上面故事中讲到的C公司的当做根证书,因为根证书是被信任的,那么下面的子证书A公司的证书也是被信任的,这就是证书之间的信任关系和信任链,这里根证书是最重要的,如果根证书不被信任,那么一切就无从谈起了。
下面看一下谷歌浏览器的数字证书
上面的图就解释了根证书和证书信任链。
如果一个网站不受信任的,那么就会有如下提示:
这个时候你就要警惕点了,小心钓鱼网站哦。
7 HTTPS
下面用一张图来简单解释网络中的安全通信
相信看完图就很明白了,原理和上面说的是一样的。
HTTP和HTTPS比较
我们都知道开放系统互连参考模型 (Open System Interconnect 简称OSI)百度百科解释是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。它从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
https和https的区别从技术层面来说是在传输层和应用层之间加了一层安全层SSL(Secure Sockets Layer 安全套接层)或者是TLS层(Transport Layer Security,TLS),SSL协议提供的安全通道具有以下特性,(1)机密性:SSL协议使用密钥加密通信数据;(2)可靠性:服务器和客户都会被认证,客户的认证是可选的;(3)完整性:SSL协议会对传送的数据进行完整性检查。;从安全性上来看,因为https加上了SSL协议所以不仅保证了传输的准确性,还保证了安全性和完整性;从表现形式上来看https请求的时候会加上一个绿色的小锁,表明是安全的,而http没有;
今天的内容就写到这里了(完)