小明有很多朋友,小红,小王,小张等都是他的朋友,小明有一把私钥和很多把公钥,他在外地要给朋友们写信,将公钥给了他的朋友们,这样小明写的信用私钥加密后只有拥有公钥才能解开,朋友的信用公钥加密后只有私钥才能解开,只要小明的私钥不丢失那么这封信就是安全的。
现在故事开始了,小明喜欢上了小红,小明在外地,通过写信的方式和小红交流,他们拥有私钥和公钥保证了信的内容不被窃取,具体过程是这样的:
小红写了信通过小明给的公钥加密后发给小明,小明用自己的私钥解密就得到了真实内容。
小明现在准备回信了,他决定采用数字签名,小明写了信通过hash函数生成了信的摘要,将摘要通过自己的私钥加密后生成了数字签名,将这个签名放在信件下面,和信件一起发给小红。
小红收到信件之后,拿出数字签名,用公钥解密得到小明用hash函数生成的信件摘要,说明这封信就是小明发出的因为可以用小明的公钥解密。 然后小红再次对这封信使用hash函数,得到摘要,如果此摘要和用公钥解密数字签名的摘要相同,则说明这封信没有被别人修改过。
下面问题来了:
小王喜欢上了小红,他也有自己的私钥和公钥,他偷走了小明给小红的公钥,拿自己的公钥代替,然而小红对此一无所知,以为自己手上的公钥还是小明给自己的小明的公钥。
小王开始冒充小明给小红写信,因为小王手上有自己的私钥,小红手上有小王的公钥,小王按照小明一样的方法和小红进行通信,但由于文笔太差,小红发现了猫腻,他怀疑小明给自己的公钥被替换了。
小红打电话给小明,让小明去找证书中心(检称CA)给公钥认证,证书中心有他们自己的私钥和公钥,小明把自己的公钥和一些相关信息给证书中心,证书中心用自己的私钥加密后生成了数字证书。
小明的到数字证书之后每次写信时将信件,数字签名,数字证书一起寄给小红,小红得到信件之后,用证书中心(CA)的公钥解密数字证书后得到小明的公钥,有了公钥就可以证明数字签名是否是小明的了。
小王在角落里攥紧了拳头。。。。。。
下面停止yy,进入实际情况:
HTTPS协议:
首先客户端向服务器发送加密请求,服务器收到请求后,用自己的私钥加密网页和数字证书一起发给了客户端。
客户端(浏览器)有证书管理器,有“受信任的根证书颁发机构”列表,客户端更具这张表进行查找,看看是否有解开数字证书的公钥。
如果数字证书上记录的网址与正在浏览的网址不同,则说明该网页可能拿了别的网站的证书来冒充,浏览器会发出警告“此网站的安全证书有问题”。
如果这张数字证书不是受信任的机构颁发的浏览器也会警告。
如果都通过,客户端就会用安全证书解密后里面的服务器的公钥和服务器进行通信。
为什么用数字证书就安全了呢?
CA的公钥是公布在官网上的,很容易就能得到,但是他的私钥是拿不到的,这保证了一般人只能通过公钥看到里面的内容,而无法修改,因为你没有可用来加密的私钥,所以受信任的根证书颁发机构颁发的证书是安全的
如果没有数字证书的话,如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪,有了数字证书,你可以判断该证书上记录的网址与你正在浏览的网址是否相同,和颁发的机构是否合法来判断,相对可靠的多。