HTTPS的数字证书验证原理

HTTPS的数字证书验证原理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接和本声明。
本文连接: https://blog.csdn.net/liuxingrong666/article/details/83869161

网络请求方式一般分为两种,分别是HTTP请求和HTTPS请求,其中HTTP的传输属于明文传输,在传输的过程当中容易被人截取而且偷窥其中的内容,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的超文本传输协议,其传输的内容是经过加密获得的,因此说是一种安全的传输。html

说到加密算法,先来了解一下两种经常使用的加密方式,分别是对称加密和非对称加密:算法

1.对称加密:加密使用的秘钥和解密使用的秘钥是相同的,也就是说加密和解密都使用同一个秘钥,加密算法是公开的,秘钥是加密者和解密者绝对保密的。浏览器

2.非对称加密:加密使用的秘钥和解密使用的秘钥是不相同的,HTTPS在数字证书验证的时候,采用的RSA密码体制就是一种非对称加密。安全

RSA是一种公钥秘钥密码体制,如今使用很是普遍,这个密码体制分为三部分,公钥、私钥、加密算法,其中公钥和加密算法是公布的,私钥是本身保密的。这种机制最大的特色是,经过公钥加密的密文只有对应的私钥才能解密,一样经过私钥加密的密文也只有对应的公钥才能解密。下面咱们将会讲到HTTPS是如何经过RSA这种密码体制去验证身份的。服务器

首先了解一下数字证书,它有点像身份证,是由权威的CA机构颁发的,证书的主要内容有:公钥(Public Key)、ISSUER(证书的发布机构)、Subject(证书持有者)、证书有效期、签名算法、指纹及指纹算法。网络

下面csdn博客的CA证书内容:网站

能够看到公钥是一串很长的2048 Bits的字符串,同时也能够看到<使用者>的内容包含了csdn.net网址,这个网址是CSDN惟一拥有的,后面验证连接url是否正确的时候用到,还有颁发者、有效期、签名哈希算法等等。固然还有指纹及指纹算法等其余内容,咱们滚动到下面看看另一个截图加密

上面是CSDN网站CA证书,颁发者是GeoTrust,它就是权威的CA机构之一。到这里特别说明一下,CA机构除了给别人颁发证书之外,它也有本身的证书,为了区分咱们称它为根证书,根证书也有本身的公钥和私钥,咱们称之为根公钥和根私钥。而后根公钥和加密算法是向外公布的,而根私钥是机构本身绝对保密的。这个根证书在验证证书的过程当中起着核心的做用。url

指纹是什么?指纹是一个证书的签名,是经过指纹算法sha1计算出来的一个hash值,是用来验证证书内容有没有被篡改的。证书在发布以前,CA机构会把所颁发证书的内容用本身的根私钥经过指纹算法计算获得一个hash值,这个hash值只有对应的根公钥才能解密,因此在验证证书的时候,咱们经过一样的指纹算法将证书内容经过计算获得另外一个hash值,若是这个hash值跟证书上的签名解析出来的hash值相同,就表明证书没有被篡改过。spa

下面基于一个简单的图例,去分析整个HTTPS的数字证书验证过程:

图示以下:

假设这是一个浏览器的HTTPS请求

一:首先浏览器经过URL网址去请求某个后台服务器,后台接收到请求后,就会给浏览器发送一个本身的CA数字证书。

二:浏览器接收到数字证书之后,就要开始进行验证工做了。首先从证书的内容中获取证书的颁发机构,而后从浏览器系统中去寻找此颁发机构是否为浏览器的信任机构。这里解析一下,世界上就几个权威的CA机构,这几个机构的信息都是预先嵌入到咱们的浏览器系统中的。若是收到的一个数字证书但其颁发机构没有在咱们浏览器系统中的,那么就会有警告提示没法确认证书的真假。若是是受信任的机构,那么就到下一步。

此时咱们就能够从浏览器中找到CA机构的根公钥,用这个公钥去解析证书的签名获得一个hash值H1,上面提到过,这个签名是证书发布以前CA机构用本身的根私钥加密而成的,因此这里只能由根证书的根公钥去解密。而后用证书的指纹算法对证书的内容再进行hash计算获得另外一个hash值H2,若是此时H1和H2是相等的,就表明证书没有被修改过。在证书没有被修改过的基础上,再检查证书上的使用者的URL(好比csdn.net)和咱们请求的URL是否相等,若是相等,那么就能够证实当前浏览器链接的网址也是正确的,而不是一些钓鱼网之类的。

这里咱们假设,若是浏览器的链接被某个钓鱼网截取了,钓鱼网也能够发一个本身的证书给浏览器,而后也能够经过证书没有被篡改的验证,可是在证书没有被篡改的状况下,经过对比证书上的URL和咱们请求的URL,就能够发现这个证书的URL不是咱们所要链接的网址,因此说钓鱼网也骗不了咱们。

看到这里若是还不是很明白证书验证过程的话,我特别解析一下,咱们知道CA机构有本身的根公钥和根私钥。在证书颁发以前,机构会用根私钥将这个证书内容加密获得一个签名,这个签名只能用对应的根公钥去解密。在客户端(浏览器)收到服务端发过来的证书之后,咱们首先从浏览器中拿到机构的根公钥,用这个根公钥去解析证书的签名获得一个哈希值H1,这个H1表明证书的原始内容,假设这个证书上的签名是不法分子伪造的,可是伪造的签名不多是根私钥加密生成的(由于根私钥是CA机构私有),因此根公钥也不可能去解密任何第三方生成的签名(加密内容只能由对应的公钥私钥解析)。而后咱们再用一样的哈希算法对收证书内容进行计算获得哈希值H2,经过对比H1和H2是否相等就知道证书有没有被褚篡改过了。讲到这里,咱们应该明白证书是否被篡改的验证机制了吧。

三:到这里,已经验证了证书是没有被篡改的而且确认链接的URL也是正确的,而后咱们获取到了证书上的公钥。下一步有一个很重要的任务就是,如何将一个对称加密算法的秘钥安全地发给服务器。

首先随机生成一个字符串S做为咱们的秘钥,而后经过证书公钥加密成密文,将密文发送给服务器。由于此密文是用公钥加密的,这是一个非对称加密,咱们知道,这个密文只有私钥的持有者才能进行解密,因此说任何第三方截取到密文也是没用的,由于没有对应的私钥因此解析不出来。

一个关键步骤,发送密文的时候也会对消息内容进行签名操做。签名上面讲解过,就是对密文内容进行hash计算获得的一个hash值,将这个签名加密之后和消息内容一块儿发送出去。接收方收到消息之后,经过私钥解析出密文和签名的hash值,同时也会对接收的消息内容进行一样的计算获得另外一个hash值,经过比对两个hash值是否相同来判断密文是否有修改过。

四:经过了上面的步骤之后,此时客户端和服务端都持有了对称加密算法的秘钥,而后兄弟两就能够愉快地安全通讯了。

总结:数字证书的验证有两个重要的步骤,第一是验证数字证书没有被篡改以及链接的URL是否正确,第二是经过RSA机制的原理安全地将对称加密算法的秘钥发送给对方。这两步都完成之后,整个HTTPS的数字证书的验证就算是成功了。

好了,经过上面 的讲解,相信咱们已经掌握了https的数字证书验证原理了。

相关文章
相关标签/搜索