数字证书介绍,这块老容易忘,记录一下。
对称加密和非对称加密
首先想说的是,虽然对称加密和非对称加密是数字证书依赖的一个基础,但是并不意味着非要把加密算法每个细节都研究透了才能理解数字证书,好比 TCP 协议,每层干好自己的事情,上层只关心下层可以提供什么功能,而不关心到底是怎么实现的。要理解数字证书,我们只需知道对称加密和非对称加密能提供什么功能,具体实现细节鼓励去看一下,但并不是充分条件。
什么是加密?比如两个人交换一段信息,如果没做什么处理,假设信息被人窃取了,那么窃取的人直接可以知道两个人之间交换了什么信息。加密就是通过某种加密算法对信息加密,接收到信息一方需要按照某种方式解密,窃取信息人不知道解密方式,拿到信息也看不到真正的原文。
对称加密就是存在一把钥匙,A 对信息用这把钥匙加密,B 可以用这把钥匙解密,常见实现比如 AES、DES。非对称则有两把钥匙,一把称为公钥,一把称为私钥,公钥加密的数据只有私钥可以解开,私钥加密的数据也只有公钥可以解开,常见实现比如 RSA。
两者加密效率不一样,非对称加密比对称加密慢很多,但是安全性更好。
数字签名
假设服务器 A 有两把钥匙,一把公钥,一把私钥,私钥自己保留,公钥给客户端,B 是其中一个客户端,现在 A 和 B 开始通信。
B -> A,B 发送消息前用 A 的公钥加密,A 接收到消息用私钥解密,只要 A 的私钥没有泄露,别人即使窃取了 B 加密过的内容,也无法还原真实内容,保证客户端向服务端发送数据的安全性。
A -> B,A 把数据用私钥加密,发给 B,B 用 A 的公钥解密
A -> B 的过程,会有问题吗?
会有,假设第三方窃取了 A -> B 的数据,对数据进行了修改,B 接收到数据后,好像不能辨别出这个数据就是 A 发出的且没被修改过?怎么解决这个问题呢,出现了数字签名。
A 发送信息前先对信息生成一个摘要,然后用私钥加密,生成数字签名,给 B 发送信息时候连同数字签名一起发送过去,B 接收到消息,用 A 的公钥对发送过来的摘要解密,并对原始信息生成摘要,比对一下,如果一样,证明消息确实是 A 发过来的,并且没有被修改过,因为除了 A 没有人有 A 的私钥。
一切看上去没有问题了,但是假设 B 保存的 A 公钥被人偷换了,保存的其实是别人的公钥,这时候别人就可以冒充 A 向 B 发送消息,这种情况下数字证书出现了。
数字证书
B 和 A 交流之前, 告诉 A 必须要去找一个可信的证书颁发机构,A 发送消息给 B 前,找证书机构使用私钥对 A 的公钥加密,生成一个证书,发送给 B,B 会检测颁发证书的机构是不是自己信任的,如果是,用机构的公钥解密,就得到 A 的公钥了。这种情况就不怕 A 的公钥被伪造。
https 类似原理,服务端去找一个可信的证书颁发机构颁发证书,然后和客户端通信,最大好处是能保证其他服务器不能冒充。
这篇文章做个基础,下篇会学习下 https。
领取专属 10元无门槛券
私享最新 技术干货