zoukankan      html  css  js  c++  java
  • HTTPS握手

    作用

    • 内容加密 建立一个信息安全通道,来保证数据传输的安全;
    • 身份认证 确认网站的真实性
    • 数据完整性 防止内容被第三方冒充或者篡改

    https的采用了对称加密和非对称加密。握手过程中采用非对称加密,得到一个对称加密的秘钥。数据传输的过程中,采用对称加密。

    采用非对称加密比较慢,因此只在握手期间采用非对称加密,保证拿到的对称加密的秘钥的安全性,数据传输期间通过对称加密来加密,速度更快。

    握手:

    对称加密秘钥的生成:

    握手期间,client与server两次往来。会生成三个随机数,由这三个随机数组成对称加密的秘钥。

    client验证server可靠性:

    浏览器第一次收到服务器的ack时,会验证数字证书,一直验证到最顶层的根证书,如果浏览器内置有,则可信,否则不可信。

    数据传输:

    http报文的内容都会经过TLS层进行对称加密,秘钥是握手时生成的。发送使用秘钥加密,接收时使用秘钥解密。

    这里有一个问题,就是利用哪种非对称加密算法,这可能会影响https握手过程中的交换数据。以RSA算法和Diffie-Hellman算法为例,看一下两种加密方式分别经历了什么。

    这个是RSA加密的交互过程。

    第一个随机数由client生成,第二个随机数由server生成。

    第三个随机数由client生成,使用server的公钥加密,并发送给server。第三个随机数即图中的Premaster secret。这个过程中,Premaster secret只有client和server知道,不会泄露。

    然后client和server根据三个随机数生成一个session key,即接下来数据传输过程中用到的对称秘钥。

    总结来说就是一共生成三个随机数,根据三个随机数创建一个对称加密的秘钥。前两个随机数可以被抓包拿到,但是第三个随机数已经使用非对称加密算法加密过,所以最终生成的秘钥是保密的。

    现在的问题就是,对称秘钥的安全靠第三个随机数的不可破解来保证。理论上来说,只要服务器的公钥足够长,那么Premaster secret可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法,改为 Diffie-Hellman算法(简称DH算法)。

    下面是DH算法握手的过程:

    与上面client使用RSA公钥加密Premaster secret然后传递的server不同的是,由server发送一个server的DH 参数+private key,client发送一个client的DH参数,那么client和server都能分别通过两个DH参数得到Premaster secret。这样就提高了Premaster secret的安全性。

    参考文章:

    图解SSL/TLS协议

    HTTPs入门, 图解SSL从回车到握手

    HTTPS科普扫盲帖

    详解https是如何确保安全的?

  • 相关阅读:
    CentOS升级Python 2.6到2.7
    ps命令使用 进程查看
    MySQL导入sql脚本 导出数据库
    html php 重定向 跳转 刷新
    Linux查看可执行程序所在路径
    解决phpMyAdmin“登录超时 (1440 秒未活动),请重新登录”的问题
    怎样选购冲锋衣
    常见排序算法及其java实现
    java开发环境搭建
    【转】与BT下载相关的概念
  • 原文地址:https://www.cnblogs.com/z941030/p/8527001.html
Copyright © 2011-2022 走看看