https说明

对称加密
   秘钥只有1个
   客户端和服务端都保存一个同样的秘钥


非对称加密
   秘钥有2个
   1个是公钥 1个是私钥
   公钥是由私钥生成出来的 公私钥是一对
   公钥可以公开给客户端  服务端保存私钥不能公开
   公钥加密后的密文只能用私钥解密 私钥加密后的密文能用公钥解密(私钥也能解密私钥加密的数据)


非对称加密缺点
    服务器的公钥是通过网络下发给客户端的
    网络中间商可以进行以下操作
      1.通过服务器的公钥解密服务器发送给客户端的响应数据(不能解密客户端公钥加密后发往服务端的数据)
      2.拦截服务端下发给客户端的公钥然后自己伪造一对公私钥并把自己的公钥发送给客户端
        这样就完全控制了客户端和服务端之间的网络通信
      3.客户端没法验证公钥是不是由真正的服务器生成的

    但是可以自己生成一对假的公私钥然后把假的公钥发给客户端来欺骗客户端并截断
    客户端和真实服务端之间的加密通信
    浏览器无法判断自己收到的公钥是不是由真正的服务器下发的


    所以使用非对称加密通信还需要验证产生公私钥主体的真实性
    因为任何设备都能产生自己的公私钥对


hash算法叫摘要算法
   md5 sha256 sha125
   数字签名
   相同的数据传递进去一定会得到同样的结果
   hash算法(公钥) = 公钥的签名(公钥的摘要)


两者之间必须有一个不用通过网络传递的东西
   


证书
  第三方私钥加密(Server.公钥) = 密文
  hash(Server.公钥) = 签名
  签名算法 = sha256
  密文 +  签名 + 签名算法 = 证书

  第三方的私钥是不可能存在服务器上的,是保存在CA的服务器上.申请证书的时候CA只能返回一个证书
  
  服务端不再下发自己的公钥 而是直接把证书下发给客户端
  客户端使用第三方公钥.解密(证书) =  Server.公钥 + 签名 + 签名算法


CA机构
   CA的公钥 
   客户端本地自带CA的公钥(已经内置在操作系统中就是可信任的根证书),无需通过网络进行传输


私钥
server.key

公钥(待签名证书) 
server.csr

证书
server.crt


包含公钥+证书
server.pem


免费(签名)生成证书网址
   www.freessl.cn

免费添加dns记录网址
   www.juming.com


TLS握手流程
   TLS握手流程是建立在TCP三次握手之后才开始的
   1.Client发起连接请求
   2.Server返回证书server.crt(server.pem)
   3.Client验证证书确定服务器的身份
   4.Client生成对称密钥,用Server证书中的公钥加密发送给Server
   5.Server用自己的私钥解密,得到Client发来的对称密钥
   6.Server和Client便可以使用对称密钥相互发送加密数据

View Code

 

https和http对比

          

https原理分析_Server

          

https原理分析_服务端_02

          

https原理分析_客户端_03

          客户端和服务端之间都是通过对称加密的方式进行通信

          对称密钥不是由客户端发送给服务端的,两端的对称密钥都是在各自本地生成的,只不过客户端和服务端生成密钥的时候采用的是协商好的相同的加密算法和相同的随机字符串做为参数,这样两端生成的密钥字符串就是一样的

TLS握手过程

       1.客户端和服务端先进行TCP的三次握手连接

       2.在TCP的三次握手之后再进行TLS的握手连接

      

https原理分析_Server_04

     TLS1.3优化了建立连接的往返次数

     

https原理分析_服务端_05

 

作者:不懂123