在这个 HTTPS 满天飞的时代,数字证书无处不在,可是数字证书的原理究竟是什么,我一直不太清楚,今天就来谈谈数字证书的那些事。html
忽然想到这个问题,是由于最近在在开发过程当中了解到一种叫作 MITM(中间人攻击) 的攻击手段。因此又去学习了一波姿式,哈哈。git
那么在开始以前,咱们先来了解一些基本的姿式、概念。github
在这个体制中密钥是成对生成的,每对密钥由 公钥 和 私钥 组成。那么它的加密解密过程是什么样的呢?算法
注意: 由公钥加密的内容,只能由私钥进行解密,也就是说没有私钥你是没法解密的。安全
对于对称加密算法来讲,加密和解密使用的密钥是相同的,不区分公钥以及私钥,也就是一把锁两把如出一辙的钥匙。因此若是你想要保证安全的话,就只有把钥匙藏好,别让任何人知道,只有通讯的双方知道。post
非对称加密算法中,加密和解密使用的密钥是不一样的。上面说到的公钥密码体制就是一种非对称加密,公钥与私钥不一样。学习
在生活中签名的做用是啥,我想你们都明白,表示这个文件是我承认的,同时防止文件被篡改。那么,在计算机领域咱们怎么进行签名呢?通常的作法就是对信息作 hash 处理,获得一个 hash 值。特别注意的是,这个过程是不可逆的,也就是说你没法经过 hash 值去推导出原来的信息。加密
咱们举个小例子来讲明这个过程:htm
如今咱们有两我的物,小张和小王,他们两个在谈恋爱,可是他们是异地恋,因而他们想用信来进行交流,可是直接写又惧怕别人看见,咋办呢?加密。开发
因此,小张拿出了一把锁,这把锁有一把钥匙,小张本身拿着这把钥匙,同时,他把开着的锁(公钥)经过快递员给了小王。
小王收到了这把锁以后,又拿出了一把锁,这把锁有两把钥匙(对称加密),而后小王留一把钥匙,把锁和另一把钥匙放到盒子里(砸不开的那种泰拉石盒子,哈哈),而后用小张给她的那把锁锁上。
好了,这个盒子除了小张,谁也打不开,通过快递员,盒子到了小张那里,小张用他的钥匙打开了盒子,而后放了个纸条写上 ”我爱你“,而后用盒子里面的小王锁把盒子锁上。
因而乎,如今小张和小王都有了这把锁的钥匙,就能够加密交流了。
那这个加密方法是完美的么?并非,好了,传说中的第三者要出现了。
这时候出现了另外一我的,小六,他也喜欢小王,因而,在小张第一次给那把锁的时候,悄悄的把锁换了,换成了本身的锁。
而后小王觉得是小张给的锁,因而将本身的锁和钥匙放在了盒子里,而后用小六的锁锁上了盒子。
因而乎,你们都知道了,小六用钥匙打开了盒子,而后把小王锁和钥匙拿到本身手里,放进去了本身的锁和钥匙,而后用小张的锁锁上盒子。
小张收到了盒子以后,觉得盒子里的锁和钥匙是小王的,因而写上了 ”我爱你“,结果小六拿到以后,把 ”我爱你“ 换成了 ”分手吧“ 发给了小王,小王收到后很伤心,就问 ”为啥要分手“,可是小六又把纸条换成了 ”那就分手吧“,完蛋,分手了。
这是一个悲伤的故事,那咋办呢?因而乎,小张发明了一种不能销毁的小条条(数字证书)贴在锁上,表示这是我小张的锁,而后小六就没办法偷换锁了。
数字证书就是咱们上面所说的那个小条条,那么数字证书如何产生的呢?
首先,咱们须要一个很权威的机构来签发数字证书给你,咱们称之为 CA,这个机构用非对称加密产生一对密钥。
而后,私钥本身藏起来,用本身的私钥对公钥进行签名,生成数字证书,证书文件都有一个明文的部分和密文的部分,明文的部分里面包含了谁签发的、签发给谁、有效期是多少等等信息,而后使用 hash 算法进行计算,获得一个 hash 值。而后再用私钥对这个 hash 值进行加密,这就获得了一个签名信息。而后把这两部分合起来,放到数字证书的文件里,这就是一个数字证书了。
好了,假如说我拿到了一个数字证书,那么我要如何去验明他是否正确呢?
首先,咱们找到签发这个证书的机构,拿到它的公钥,而后用公钥去解密密文,获得 hash 值,接下来,咱们经过一样的 hash 算法对明文进行 hash 处理,如今咱们就有两个 hash 值了,咱们比对一下这两个 hash 值,就知道证书是否正确了。
那么,咱们从何得知它是否可信呢?我是否是能够本身给本身发一个证书啊,固然这是不行的,上面说的权威机构,就那么些公司,这几个公司的证书被各软件厂商设置成“可信任的根证书”,而后这几个根证书能够去证实其余的证书。就好比说你爸信任你,你信任你的女友,那么你爸也就信任你的女友了。而上面说的本身给本身发的证书各厂商固然就不信任了。
这篇文章也只能说个大概,真实状况更加复杂,记得之前颁发证书使用的非对称加密算法是 RSA,后面有了解到一种叫 ECC 的加密算法,安全性高,处理速度快,存储空间占用小,有篇博客你们能够看看。
好了,就说到这里,其实对这方面了解的也不是太多,若是有错误,望指出改正。
若是各位看官看的还行,能够到 个人博客仓库 里给我一颗小小的 star 支持一下,不胜感激。