HTTPS的数字证书验证原理

版权声明:本文为博主石月的原创文章,转载请注明出处 https://blog.csdn.net/liuxingrong666/article/details/83869161

我们知道,网络请求中我们的网址分为两种,分别是HTTP请求和HTTPS请求,而HTTPS是一种在HTTP的基础上加了SSL/TLS层(安全套接层)的安全的超文本传输协议。HTTP的传输属于明文传输,所以说是不安全,在传输的过程中容易被人截取并且偷窥其中的内容,而HTTPS传输的信息是通过加密的,也是一种安全的传输。

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

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

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

RSA是一种公钥秘钥密码体制,现在使用非常广泛,这个密码体制分为三部分,公钥、私钥、加密算法,其中公钥和加密算法是公布的,私钥是自己保密的。这种机制最大的特点是,通过公钥加密的密文只有对应的私钥才能解密,同样通过私钥加密的密文也是只有对应的公钥才能解密。下面我们将会讲到HTTPS是如何通过RSA这种密码体制去验证身份的。

我们讲解一下这个数字证书,这个有点像身份证,是由权威的CA机构颁发的,证书的主要内容有:公钥、ISSUER(证书的发布机构)、subject(证书持有者)、证书有效期、签名算法、指纹及指纹算法。其中指纹是指这个证书是签名,这个很重要,是用来验证证书内容有没有被篡改的。证书在发布之前,ca机构会把证书内容用自己的私钥通过指纹算法计算出一个hash值,这个hash值只能通过颁发证书的ca机构的公钥去解密,所以在验证证书的时候,我们通过同样的指纹算法把接收到的证书内容进行hash计算得到另一个hash值,如果这个hash值跟证书上自带的hash值相同,就代表证书没有被修改过。

下面我们通过简单的图例来解析一下,整个HTTPS的数字证书的验证过程是怎么样的,通过下面的分析,我们就可以明了为什么HTTPS传输是安全的了。

图示如下:

下面我们基于整个流程图来讲解数字证书的验证过程,假设我们是一个浏览器的HTTPS请求。

1.首先我们的浏览器通过URL网址去请求某个后台服务器,服务器接收到请求后,就会给浏览器发送一个自己的ca数字证书。

2.浏览器接收到数字证书以后,就要进行验证工作了。首先从证书的内容中获取当前证书的颁发机构,然后从浏览器系统中去寻找此颁发机构是否为浏览器的信任机构。这里解析一下,世界上就几个权威的ca机构,这几个机构都是预先嵌入到我们的浏览器系统中的。如果接收到的证书的颁发机构没有在我们浏览器系统中的,那么就会有警告提示,无法确认证书的真假。如果是受信任的机构,那么就到下一步。

此时我们就可以从浏览器中找到机构根证书上的公钥,用这个公钥去可以去解析证书的签名得到一个hash值H1,上面提到过,这个签名是证书发布之前机构用自己的私钥加密而成的,所以这里只能由对应的公钥去解析。然后我们用证书的指纹算法对证书的内容也进行一次hash计算得到另一个hash值H2,通过H1和H2的比对,如果相等,就代表证书没有被修改过,可以信任的。此时我们再检查证书的持有者的ID即对应的URL是否为我们请求的URL,如果是,那么就可以证明浏览器当前连接的是正确的网址,而不是一些钓鱼网之类的。

这里我们假设,如果浏览器的连接被某个钓鱼网截取了,钓鱼网也是可以发一个自己的证书给浏览器,此时通过上面的验证步骤,首先我们在证书没有被篡改的情况下,我们对比证书上的URL和我们请求的URL,就可以知道我们连接的那个网址是不是正确的。所以说钓鱼网就不能骗过我们了。

3.此时第二步完成了,我们可以确认是浏览器的连接网址是正确的,是我们想要连接的那个服务器,而此时我们也拿到了证书上的公钥。下一步有一个很重要的任务就是,将一个对称加密算法的秘钥安全地发给服务器。我们是这样做的,我们将随机产生一个字符串R作为我们的秘钥,然后通过证书公钥加密成密文,然后将密文发送给服务器。因为此密文是用公钥加密的,这是一个非对称加密,是公钥密码机制(RSA)下的加密,上面我们讲解过,此机制情形下,只有秘钥的持有者才能对这个密文进行解密。所以说只有持有秘钥的服务器才能解析到密文内容。任何没有秘钥的第三方截取到密文也是没用的,因为解析不出来。

这里还有一个很重要的步骤是,发送密文的时候,我们会对消息内容进行签名操作。签名我们上面讲解过,就是对密文内容进行一次hash计算得到一个hash值,同时将这个hash值进行加密和消息内容一起发送出去。接收方收到消息以后,通过私钥解析密文,同时也会对消息内容进行同样的hash计算得到hash值,通过比对两个hash值是否相同来判断密文是否有修改过。

4.通过第三步的操作,此时客户端和服务器都拥有了同样的对称加密算法的秘钥,因为只有它们两者知道,所以这时它们就可以愉快地安全通信了。

5.通过上面我们可以看到,有两个非常重要的步骤,第一是验证数字证书的正确性还有连接网址是否正确,第二是通过RSA机制的原理安全地进行了对称加密算法秘钥的传递。这两步安全完成以后,整个HTTPS的数字证书的验证就算是成功了。

好了,通过上面 的讲解,相信我们已经理解整个HTTPS请求是怎样进行数字证书的安全验证了。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/liuxingrong666/article/details/83869161