http(对称加密):数据传输必须要有密码,所以服务器生成了一个密码,用于数据的加密和解密,可是现在只有服务器知道,所以也要告诉客户端这个密码是多少;那么问题来了,如果密码传输过程中被截获怎么办?
那么就采用非对称加密,这样客户端用公钥加密,服务器用私钥解密就行了,而黑客只有私钥而没有公钥,所以什么都做不了,哈哈。但是如果黑客又想了一招,拦截服务器发送的公钥而换成自己提供的公钥,这样加密之后,黑客用自己提供的公钥对应的私钥来解密。这样,接下来黑客就成了服务器,你的所有信息都送到了黑客手里,天哪。。
所以就要验证,对方是不是服务器。权威机构CA提供了证书。所以对方就要发送自己的证书给客户端来进行验证。所以重点就是这个证书能不能证明自己就是服务器而不是黑客,那么这个证书是什么原理来验证“我”就是服务器。
证书包括信息:证书的公钥,颁发机构,颁发给的机构,这些都是明文信息,我们称为内容P。
然后使用hash算法,对内容P进行hash计数,得到一个hash值H。
然后使用签发机构的私钥对H进行RSA加密,得到签名信息S。
然后将P,S连成一个文件,这个文件就是所谓的数字证书了。现在假设某人得到了这个证书,如何确认这个证书属于谁的呢?
我们看数字证书里有些什么?可以得到P,可以得到S。
我们用同样的hash算法对P进行hash计数,得到一个hash值H1.
P里有公钥,签发者ID,Subject,有效期,及其他信息。我们用公钥解密S,得到了一个值H’。
这个H‘就是制作数字证书的时候,用私钥对S加密的H。
现在对比H’和H1是否相等,如果不相等,就说明:1.内容P被篡改过,或者2.证书不是由CA签发的。
反之则证明了这个公钥就是服务器提供的。如果是服务器提供的,便可以用这个公钥对接下来客户端生成的随机数(也就是之后数据的加密解密的密码)进行加密。
此时,可靠的通信就以建立,可以安全的进行数据传输。
那为什么会出现浏览器警告用户,说这个网站提供的证书不安全,那是因为这个证书是第三方签发的,但这个第三方却不权威。浏览器就只认权威CA,只存了CA提供的证书的共钥。连公钥都没有,所以连内容P的验证都无法进行,更不用说验证S了,所以当然就是不能被信任的。
其中一部分引自知乎问题的一个答案:数字证书的原理
more:关于12306,参见12306的证书问题
网友评论