HTTPS及流程简析

  • 【序】

       在我们在浏览某些网站的时候,有时候浏览器提示需要安装根证书,可是为什么浏览器会提示呢?估计一部分人想也没想就直接安装了,不求甚解不好吗?

       那么什么是根证书呢?在大概的囫囵吞枣式的百度之后知道了一些,但是还是很迷糊的,最终选择了解一下,首先在学习之前,抛出自己开始了解的时候一些迷糊的问题。


  • 什么是根证书

       静下心来之后在网上找了一通资料看了下,神奇的百度百科给的答案是“在密码学和计算机安全领域中,根证书是未被签名的公钥证书或自签名的证书”,一看这种话就有点虚,没办法官方的解释就是这么专业,专业到专业的人也看的很费劲。

  • 证书从哪里来的?

       证书需要专门的CA机构有偿颁发,其实自己也可以弄免费的吧,但是不知道人家会不会用你的,抛去一些繁杂的概念,通俗点大概就是一个存有一些信息的程序安装到你的浏览器,至于Https 就是Http+SSL的一种实现,SSL是一种安全传输协议,我在想我要是连HTTP都不知道的话,就没必要再对HTTPS的学习进行下去了。

  • 什么是Https?

       其实由上面一部分的介绍,我们就可以知道HTTPS就是一个安全的传输协议,为什么会安全呢,就是因为拥有了SSL(CA)证书,简单理解其实SSL证书就是CA证书,其中应该还牵扯到很多的专业知识,但是我并没有去深究,因为如果死磕一个点可能会误导学习的大方向。

  • 执行流程

        在利用Https请求访问安装了CA证书(或者是实现Https传输 的服务器时,客户端想要去访问,那么就需要在本地浏览器安装一个根证书。

       现在很多浏览器都默认安装了主流的CA供应商提供的根证书,在访问同样安装证书的服务器的时候就不用安装了,同理我们自己也可以弄一个服务程序,再安装一个SSL证书,在客户端上也同样弄一套。

       说点题外话,证书网上有免费的,如果足够牛的人,写一个应该也是没有难度的,至于其中实现的原理待以后再去探究,接下来详细描述一下请求交换的过程。

  • 1.在我们安装了根证书的浏览器利用HTTPS请求服务端的时候,服务器会返回一个证书信息,其中包括

    1. 证书有效期信息、发证的CA供应商信息

    2. 一些扩展信息和数字签名(数字签名就是前面几个信息做了一个MD5的摘要并且用CA供应商提供的加密密钥加密了)

    3. 服务器自己生成的一个公钥、证书持有人信息

  • 2.当客户端接收到信息之后首先会根据自己安装的根证书中的公钥解开证书中数字签名的信息以确定该证书是当前CA供应商提供的,但是还需要验证证书的正确性因为只是收到了证书。

  • 3.此时客户端是不知道证书内容是否正确的,所以需要对收到的证书前几条信息同样做一个MD5摘要和解密出来的数字签名对比,如果相同就代表证书是正确且有效的。

  • 4.接下来客户端开始访问服务端了,但在此时还没有完成检查,因为我们只是验证并且确定了证书的正确性,还没有确定当前访问的服务器是否是正确的服务器。

  • 5.所以客户端需要利用证书中返回的公钥对需要发送的信息进行加密,然后发送到服务端,只有当服务端利用自己的私有解密密钥才能对请求的加密信息进行解密并且返回给客户端。

  • 6.如果果验证通过那么客户端和服务端就会利用刚才发送的信息做为对称密钥来加密之后需要传输的信息。

        按照上面步骤用加密解密保证了Https的安全性,由此对比Http协议请求是非常不安全的,但是在平时的web开发中如果不涉及重要信息,也还够用,如果真的有需要保证请求以及数据安全的场景,现在已经有成型的解决方案了。

        假设从程序设计,客户端到服务端,到自定义数据协议,再到实现SSL的实现,以及其他一些我不知道的东西,仔细一想如果自己动手实现这一整个流程将会是巨大的工作量,而且在实现的背后需要强大的技术支撑。

上一篇:Tensorflow 实战Google深度学习框架 第五章 5.2.1Minister数字识别 源代码


下一篇:PKI及SSL协议分析