zoukankan      html  css  js  c++  java
  • https协议解析

    加密算法

         对称加密
               只有一个密钥,在加密数据的过程中需要使用到盐(盐是一串随机的字符串)


        非对称加密
              1.先用算法生成私钥
              2.再用私钥生成公钥
              先有私钥,才有公钥

         公钥加密后的密文可以用私钥解密
         私钥加密后的密文可以用公钥解密
         公钥加密后的密文不可以用公钥解密

         私钥加密后的密文可以用私钥自己解密


        hash摘要算法
              相同的数据通过算法得到的结果永远一样
              用来做数字签名 实现证伪作用

        签名

             相同的内容通过签名后的结果一定是一样的,通过这种手段来验证接收到的内容是否被篡改过.

             签名就是内容的hash值

        https的核心
           1.私钥存在服务端上,是不可能被其它任何主机所获取
           2.公钥会向各个客户端公开,所以在公开的过程中有可能会被篡改
           3.CA证书的用途就是要验证客户端获取的公钥是不是对应服务端的公钥

           4.https有一个第三方的证书的介入,这个第三方的证书是不会通过网络进行传输的而是预先内置在操作系统中,通过这种方式保证其保密性

       证书

            一个证书包含一个加密密钥和一个签名

            加密密钥就是一个长的字符串 通过这个字符串来加密和解密内容。

           签名就是一个hash算法值,主要是用来验证生成密钥的主机是否是合法。确保密钥不是非法主机所生成的

    对称加密和非对称加密算法

              

              1.使用对称加密算法进行通信的时候双方需要先协商一个盐,这个盐一旦在网络上被其它设备获取.那么中间设备便可以破解双方之间的加密通信内容

              2.使用非对称加密算法通信

                  

                   

    CA机构

             CA是一个第三方机构,它会把自己的公钥预先内置到操作系统中。一个CA可以同时给很多个server端签发证书

              

     https建立连接过程

             

            

            

              

     整体流程分析

       https传输内容加密本质上是通过对称加密的方式实现的
       用非对称加密来保护对称加密的密钥在网络上的传递,当其它设备无法获取对称加密的密钥时
       双方之间发送的数据也就无法被其它设备所破解。(通信内容可以被截取,但是无法破解明文内容)
      1.首先确保服务端下发给客户端的公钥是没有被篡改的


        1.server端通过非对称加密算法生成一个私钥,然后server通过自己的私钥生成自己的公钥
        2.server提交自己的公钥给CA机构申请签名
        3.CA拿CA的私钥对server的公钥进行签名,CA签名后生成证书
         生成的证书包含
           1.证书是谁颁发的
           2.证书有效期
           3.server的公钥
           4.server的签名
         生成的这个证书需要存放到服务端上,然后通过服务端下发给客户端

       4.客户端向服务端的443端口发起连接请求,告知服务端自生支持哪些对称加密算法
      5.服务端接收客户端请求把存在服务端被CA签名的证书下发给客户端同时协商完一个双方都支持的对称加密算法
      6.客户端通过内置的CA的公钥解密服务端下发的证书,获取到server端的公钥.
         CA的非对称加密算法保证的是客户端接收到的server端的公钥没有被篡改过.中间设备可以通过CA公钥截取查看server端的公钥但是不能修改
        1.CA在生成的证书当中会包含server端公钥的签名值和签名算法
        2.客户端在收到证书后通过CA公钥解压得到server端公钥并使用签名算法在本地给server公钥进行签名
        3.比较本地签名和证书中的签名是否相等
        4.数据在传输之前进行一次签名,把签名的结果和数据一起打包发送给对方。
        5.本地在接收到数据后通过同样的方法进行签名,比较本地的签名值和远程主机的签名值.

      7.客户端生成一串随机的字符串并使用证书中的server公钥进行加密.并发送给server端
        由于非对称加密算法的特性,由公钥加密的内容只能由私钥进行解密.而server端的私钥只存在服务器本地
         也就是除了服务端能解密客户端提交过来的密文,其它中间设备即使能截取到加密密文也无法解密内容.也就无法获取客户端生成的随机字符串
      8.服务端通过自己的私钥解密得到客户端生成的随机字符串
      9.服务端和客户端通过双方协商好的对称加密算法以及客户端生成的随机字符串做为加密算法的盐来对双方通信的内容进行加密传输

  • 相关阅读:
    关于C#的委托与事件的重新认识
    linux 下添加,修改,删除路由
    反射获取程序集的信息
    原创:2016.4.252016.5.1 C# informal essay and tittle_tattle
    原创:C sharp 中 Enum的几点小 Tips
    转:Dictionary<int,string>怎么获取它的值的集合?急!急!急!
    转:C#整数三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别
    转:C#: static关键字的作用
    新博客 Fighting
    Win10系统下在国内访问Tensorflow官网
  • 原文地址:https://www.cnblogs.com/yxh168/p/15094803.html
Copyright © 2011-2022 走看看