认证、HTTPS、证书的基本含义

前言

通过前面的总结 《对称加密、非对称加密、公钥、私钥究竟是个啥?》,我们基本了解了对称加密和非对称加密的概念和特点,考虑到效率和安全性,一般可以使用非对称加密来传递对称加密所需密钥,之后就采取对称加密通信了,这样可以大大提高数据发送的的效率。

其实密码技术除了应用在加密领域外还有很多其他的用途,比如验证数据的完整性、用来做认证、提供一些不可否认的证据等,这些应用也常常出现在我们的日常生活中,比如很多官方网站在提供软件下载链接的同时,还附带一个验证的字符串,实际上很多就是md5码或者hash码,这些就是供下载的人来验证完整性的,防止被其他人篡改。

download

我们下载完软件之后,使用工具来将软件转化成一串字符,听起来很神奇,实际上就是计算一下软件的md5码或hash码,然后和网站上的标注的信息进行对比,如果一致那么软件就是完整的。我曾经就遇到过一次,当时做的游戏发包,同事给我发了测试包,安装之后无法正常使用,检查包的大小与发送端的一样,后来使用检测工具计算发现md5是不同的,原因可能是发送包的时候电脑卡死过,导致最后发来数据包与原始数据产生了差异。

但是你有没有想过,这个软件虽然是完整的,通过md5计算发现也没有被其他人篡改,那么怎么证明你下载的网站真的是官网呢?万一官网也是伪造的呢?如果有人伪造了官网,又将上面的软件进行修改重新计算md5然后上传到自己伪造的界面上,你要怎么来识别呢?

fish

可能有的人会想到看网址啊,taobao.com 就一定是淘宝的网站吗?这个域名是可以伪造的,所以要验证网站上东西是真的,那么首先要验证你看到的网站是真的,这就涉及到了认证身份,接下来可以简单了解下什么是认证。

认证

其实密钥不仅仅可以用来加密,还可以用来认证的,那么什么是认证?认证是一种信用保证形式,表示对一种事物或一个人的信任和认可,比如常见的毕业证书、结婚证书都是对人一段经历或一种关系的证明和认可。最简单的网站登录是基于密码的验证,这实际上就是利用对称加密的认证。

网站保存了你的用户信息和密码,下次再登录的时候输入密码后,网站会用你输入的密码和之前保存的密码进行对比,如果密码相同则认证成功,成功的证明了“你”就是“你”,而非对称加密同样可以用来做认证。

在非对称加密的实现中,私钥是只有自己保存的,而私钥加密的内容可以使用公钥解开,如果一份加密数据可以用 Jerry的公钥解开,那么我们就可以认为这份数据是 Jerry 发出的,因为只有 Jerry 自己有私钥,所以可以通过这种方式来进行认证。

而在网络上想要认证一个网站的身份,确认它不是钓鱼网站,第一个映入脑海中的就是 https,一般提到 https 都会说它是加密的、安全的,是 http 的升级版,但是 https 的安全不仅仅体现在加密上,还有它的认证功能,可以使你免受钓鱼网站的侵害。

HTTPS

简单了解下 HTTPS,一般来说网络模型常说的有OSI七层模型和五层模型,HTTPS 的诞生并没有增加模型的层数,HTTP 是建立在 TCP基础上的应用层协议,而 HTTPS 是在 TCPHTTP 之间的会话层中加了一些特殊操作,使原来明文传输的内容,在会话层这一步进行加密,并且可以对数据来源进行认证。

提到 HTTPS 就不得不说 SSLTSLSSL 是应用在 HTTP上的一个协议加密层,最初是由网络大佬网景公司(Netscape)研发,后来升级为 TSL,简单的理解就是 HTTP + SSL/TSL = HTTPS

safe

随着网络安全逐渐得到大家的认识,一些主流网站基本都都将访问方式改成了 https,支持 https 的网站在浏览器的地址栏中通常有一把小锁,点开会提醒你访问的是安全的连接,如果你访问的连接疑似被人篡改或者仿冒,那么这把小锁会被斜线划掉,提醒你网站危险请谨慎访问。

dangerous

那么 https 是怎么判断出来哪些网站是安全的,哪些网站是仿冒的呢?毕竟有些网址都很像甚至可以做成一模一样的,这就用到了非对称加密的认证功能,当我用 A 的公钥可以解密一段消息,那么就可以证明消息是 A 发来的,https 的认证功能正是利用了这个特点。

当访问一个网站的时候,网站先给我发一个用它的私钥加密的数据,然后我用它的公钥来解密,如果解密成功就说明我访问的网站是正常的,可以继续访问,如果解密失败则很有可能是虚假或者仿冒的网站,应该仔细辨别一下了。

这里会有一个问题,我怎么才能得到网站的公钥呢?之前说过密钥配送问题,直接由网站发给我肯定不行,中间可能被篡改,也有可能一个虚假网站把它自己的公钥发给我了,我用假的公钥验证对应的假的私钥也是成功的,这样就起不到认证的效果了,必须给他找个证明人才行,这就要用到我们下面要说的证书了。

证书

证书是用来证明一件事情或东西的,刚才说网站的公钥不能它自己来发,这样不能证明它的身份,我们可以找一个权威的机构给它认证一下,我每次从权威机构获得网站的证书,从这个证书中取得公钥,如果用这个公钥可以解开网站私钥加密的内容,那么就可以认证它的身份了。

这里提到的证书就是网站所有者找权威机构申请的,权威机构把网站信息、有效时期、对应的公钥、序列号消息等数据存储到证书中,当我们需要能某个网站的公钥时,去证书中取就可以了,这里的证书有点像营业执照了,由权威机构发布,用来证明你的身份。

但是权威机构的证书怎么发给我呢?我们有理由认为网络是不安全的,那证书如果直接通过网络发给我同样是不安全的,还有一个问题就是网站虽然找了一个权威机构,但是我认为它不够权威怎么办?这时这个权威机构可以找一个更权威的机构证明自己,让更权威的机构给自己颁发一个证书,这样就形成了证书链。

capath

就像现实生活中我要找个人来干活,因为工期比较紧所以找的人要求踏实,必须能老老实实把活干完,不能半路撂挑子,张三过来应聘,正在我犹豫时,走过来一个叫李四的人说张三没问题,但是我还是不能确定,因为李四我也不熟悉,然后李四居然把我爸叫来了,我爸和我说李四这个人特别诚实,从来不说谎,这时一条证书链就形成了,李四为张三证明,我爸为李四证明,那谁来证明我爸说的是真的呢?不需要的,我无条件相信他。

这在计算机的证书链中就是根证书,根证书不需要别人来证明,你只能无条件相信它,它是整个信息链的源头,通常内置在操作系统或者浏览器中,关于根证书还要一些好玩的故事和一些变态的应用,下次再说吧,准备睡觉了~

总结

  • 密码技术除了应用在加密领域,还可以用来验证数据的完整性、用来做认证、提供一些不可否认的证据
  • HTTPS 不仅可以用来加密通信内容,还可以用来验证网站的真实性
  • 正规的支持 HTTPS的网站在访问时会地址栏会有一把安全的小锁头,但是有些不出现小锁头的网站并不一定都是非法的
  • HTTP 网站是没有小锁头的,因为有些数据不需要加密,毕竟绝大多数的 HTTPS 证书是要钱的,有很多网站由于经费问题还未投身于 HTTPS 的怀抱
  • 根证书通常内置的操作系统或者浏览器中,是证书链的源头,你必须无条件的信任他。

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

当我们拼劲全力到达自己的终点时,可能会看到同行的人正在你的终点线前伸伸懒腰准备出发,然后一骑绝尘消失在你震惊的目光中,但是这不是我们放弃努力的理由,因为如果你不努力,你甚至连他们的背影也看不到~


2020-6-14 23:20:21

Albert Shi wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客