HTTPS证书入门(上)

今天我们来聊一聊HTTPS证书,本来权威的名称是"数字证书",但是本文讲的范畴主要是网站的加解密,与https协议强相关,所以称为HTTPS证书。

提到HTTPS证书,我们能想到些什么?

  • https更安全,加密通信内容
  • https加密依赖证书
  • 是非对称加密
  • 8080 + 443端口
  • http + ssl = https
  • ......

上面列举的这些,大概就是我们提到HTTPS证书的第一印象。或许很多人完全小白,对这些概念一概不知,连HTTPS比HTTP更安全都不知道,那就耐心听我讲下去好了。

首先呢,打开百度网站,我们看到地址栏前面有一把锁,如下图:

这个就表示这个网站是https的网站,通信是安全的。与之相对的,传统的http开头的网站就是不安全的。那么安全指代的范围是啥呢,即具体对什么安全,对什么不安全呢?

第一,对传输的内容不安全;第二,网站可被篡改。

为啥Http不安全?

你们知道一个叫WireShark的软件么,它既可以抓包,也可以回放包。抓包,抓的是什么包?数据包。不说邮件协议和数据库协议,我们这里只讲浏览器发起的请求,普通网站的请求过程。数据包指的就是你在网站上操作,发起的请求和服务器给的响应的内容的二进制形式。这些二进制内容可以被组织成人类可接受的形式,展示出来。

举个很简单的例子,多年以前QQ空间盛行的时候,你,是个女神,往你的QQ空间上传了许多不那么想被人看见的照片,但是呢,很多人又特想得到这些照片。怎么得呢,某人的表哥在电信公司上班,他就可以得。他怎么得呢?

我们都知道,我们要想上网,几种方式,流量和WiFi嘛,或者是网线直接接入电脑。而为我们提供上网服务的是谁呢,就是这些运营商,移动联通电信啥的。可能流量不好理解,网线最好理解了,你给你的QQ空间上传了一张照片,也就是一个将照片从本地迁移到QQ空间的提供商腾讯的电脑上的过程。怎么过去呢,计算机会将你的照片转成二进制形式,然后按个发送键,他就顺着你电脑的网线,经过几个路由器交换机,再经过埋在地下的光纤,等等等等,最后到达腾讯的服务器。当然,传输过程中肯定不是二进制了,毕竟光纤可不认识什么二进制,他们认识的只是电流信号。电流的一开一关,也就是二进制的一下0一下1的,最后这堆二进制就跑到了腾讯电脑上了。顺口说下,这堆二进制怎么还原成你能接收的图片的呢,不是有很多种图片格式么,JPG、PNG啥的,不同的格式代表不同的解密方式,就是根据这种指定的规则去还原的。

好的,废话(专业的)说了这么多,回头来讲讲为啥人家可以看得到你的照片。刚刚讲到数据传输过程中,会经过交换机,这些交换机一定会包含电信机房里的一台,很多交换机都有一个镜像拷贝的功能,就是这个端口的流量可以在另外个端口完全得到,所以人家都拿到你传输的完整数据了,想做点儿啥不行呢,嗷。

你或者说了,电信怕没那么多坏淫,国家查严点儿,或者对这些交换机管控好,不就可以避免了么,为啥一定需要Https呢?此言差矣,那是有关系的才去找交换机开流量呢,那么多没关系的呢?就只有刻苦努力,扫描肉鸡,寻找端口,植入木马,抓取数据。反正呢,只要你的电脑能联网,人家就可以很容易获取到你的数据。反正我说,你信就好了。

那么,你的手机空间又不足,你就得把部分照片甩到QQ空间,怎么办呢?你可以说,拿个WinRAR软件,压缩加密一下,设置个倍儿复杂的密码,然后上传给百度云盘(腾讯云盘也可以),是不是就心安好多了呢。好吧,暂且认为这个方式可行。

为啥需要HTTPS?

我们讲讲刚刚为啥我说"暂且可行",刚刚的方案有些啥问题?第一,为了不让人家看,你只能将文件对给百度云盘,这都变更目的地了,你的照片可能想对部分QQ好友可见的,哦豁,不行了,人家QQ空间支持照片啊,不支持zip格式的文件;第二,如上,我是表哥,我拿到了你的数据包,zip格式的,加了密,虽然是麻烦了点儿,但是如果破解了,我可以拿着照片去卖钱啊,反正我时间多。于是,我就一遍遍的试(穷举法),由于我认为我为此得到的收益值得我付出的时间和精力,那么我就会用这种笨方法(这就是网络攻防的收益代价比)。然后你在压缩时输入密码,又被人家穷举着破解了,这种加密方式成为对称加密(加密密码和解密密码是一个),人家猜到你的密码了,就可以解。

为啥需要https呢?因为https是非对称加密,即使他耗尽精力,穷其一生,也无法破解,完美!

有了https,你在网站上输入的密码,聊天信息,接头地点,都可以隐蔽下来,从此网站通信的内容都是很难被破解的了。

对称VS非对称加密

刚刚讲到,https是非对称加密,所以安全,接下来我们讲讲这俩有啥区别。

常见的对称加密算法有,DES/3DES/AES,他们的特征是,加密和解密的密钥是同一个。反之,非对称加密就是,加解密的密钥不是同一个。下图摘抄自网上:

 RSA算法原理

为啥加解密的密钥不是同一个,就安全了呢? 先复习下数论的知识,我们知道数论里有个叫素数(质数)的概念,即只能被1和本身整除的数。那么两个质数的乘积,因子除了1,也只有这两个质数,因为这俩因子是不可再被分解的。

所以我们将两个非常大的素数的乘积作为公开的密钥(简称公钥)发布出去,这两个素数本身自己悄悄保存着,然后拿着公钥对内容加密,并且规定只能用私钥解密,是不是人家就很难解密呢?我们来测试一下,首先在百度搜索质数发生器,找个可以生成素数的网站,如下:

然后你试着写一段代码,将这两个素数相乘,然后求它们的因子,代码如下:

 1 public static void main(String[] args) {
 2         long val = 3330L;
 3         printExecuteTime(val);
 4     }
 5     
 6     
 7     public static void printExecuteTime(long val) {
 8         System.out.println("给定一个数字: " + val + ",开始找公因数:");
 9         for (long i = 2; i < val; i++) {
10             if (val % i == 0) {
11                 System.out.println(val + "可以被" + i + "整除,商为:" + val / i );
12             }
13         }
14         System.out.println("结束咯.");
15     }

经过测试,循环11位数的数字,需要30秒,去掉求模运算,需要1秒多;12位数的,300秒,去掉求模,11秒;依次翻倍递增。而我们RSA参与运算的质数最少都是128位16进制的,可想而知。

HTTPS概念

说完了加解密原理,我们也就懂得了https安全的基础。那么纠结https是个什么呢?上文我们说到,https是http + ssl,http是啥,ssl是啥?

简单说,HTTP是超文本传输协议,也就是凡是你通过浏览器访问网站,都必须执行的规范。为什么需要这种规范呢?因为网络中传输的东西很多,邮件的,传输的内容必须包含收件人,标题啥的,而网站的,必须得指定访问的域名,请求方式,传参,响应的状态码。应用不同,需要的规范(协议)也不相同,所以HTTP也被称为应用层协议。

而SSL呢,也是一种协议,但它的作用是用作加密的,不是标明应用特征的。它加解密的核心算法就是我们前文提到的RSA,但是不仅限于此,是多种算法的混合,SSL在网络模型中的位置如下:(图来自网络)

上图中提到了另一个概念,TLS。可以理解为SSL V3.1 == TLS V1.0,版本越高,使用的加解密算法越安全,目前SSL低版本已经不推荐使用,被爆出的漏洞较多,其中最多的就是SSL早期使用的对称加密算法RC4,

 上图是列举的两个关于SSL的web漏洞,解决方案通常都是升级SSL到TLS。

证书如何鉴别身份

下图是网上找到的关于证书作用的解释:

关于保密性我们可以理解,但是身份认证和完整性怎么实现的呢?这就关系到刚刚讲非对称加密和对称加密里,我漏掉的算法,sha和md5这两个信息摘要算法。对hash算法有了解的朋友应该知道,哈希的几大特性:

  • 任意长度输入,固定长度输出
  • 不可逆
  • 性能极快
  • 不易hash冲突

怎么做到的呢?简单说原理就是,按规律截取输入中的指定处的字符,经过一定运算,输出成固定长度的输出,当结果的位数足够,两个不同输入输出结果一样(hash冲突了)的可能性就越低。

而鉴别两个输入是否一致,就看两个输入生成的hash值是否一样;而怎么保证完整性呢,就是将输入和输出同时发给另一个人,另一个人用hash算法对接收到的输入进行运算,看结果和接收到的输出是否一致,不一致说明文件篡改过。

https证书也就是利用的这个原理,做的身份验证。linux系统上有个命令,叫md5sum,用于快速生成某文件的md值,原理一样。

由于篇幅实在太长,证书的制作和通信过程等内容放在下一篇讲解。

参考网址:

https://cloud.tencent.com/developer/article/1444711

https://www.cnblogs.com/cjm123/p/8243424.html

原文地址:https://www.cnblogs.com/cherishBlueSky/p/11812010.html