zoukankan      html  css  js  c++  java
  • HTTPS原理

    背景

    A和B通过网络进行通信

    发展

    1. 阶段一:不加密

    A和B直接通过网络发送数据

    缺点:数据透明,能随时被别人窃取,毫无安全性

    2. 阶段二:对称加密

    生成一个秘钥,A和B分别持有。A发送数据经过秘钥加密后传输给B,B通过秘钥解密后得到数据。B发送数据同样如此。

    缺点:秘钥如何传输?秘钥一开始被别人截取则后续的传输形同透明

    3. 阶段三:非对称加密(RSA)

    A生成一个公钥A和私钥A,私钥只有自己知道,公钥全世界都知道都行。公钥加密的信息只有相应的私钥能解开,私钥加密的信息只有相应的公钥能解开,B同样生成一个公钥B和私钥B。

    A传输数据之前将数据通过公钥B加密,经过网络传输到达B,只有B的私钥B才能解开公钥B加密的信息。B向A传输数据同样如此。

    缺点:1. 传输速度很慢;2.不能确认B的公钥是否就是B的公钥(中间人将自己的公钥伪装成B的公钥发给A,再把自己的公钥伪装成A的公钥发给B,则数据同样会被窃取)

    4. 阶段四:非对称加密+对称加密

    A生成一个密钥通过非对称加密(RSA)传输给B(确保安全),B收到只有两个人知道的秘钥以后(理论上)以后就都通过这个秘钥进行对称加密。

    缺点:不能确认B的公钥是否就是B的公钥、A的公钥是否就是A的公钥(中间人将自己的公钥伪装成B的公钥发给A,再把自己的公钥伪装成A的公钥发给B,则数据同样会被窃取)

    5. 阶段五:数字证书

    上一阶段无法证明A的公钥就是A的公钥,数字证书就是解决这个问题。

    A向B发送公钥以及A的一些基本信息。先通过hash算法生成摘要(digest),然后A再通过CA(认证中心)私钥对摘要进行加密生成数字签名。再讲数字签名与原始信息(公钥以及其他信息)合并生成“数字证书”。

    发送方:发送自己的公钥和基本信息生成的数字证书

    接收方:接收到数字证书后,用CA的公钥对数字证书进行解密(确认数字证书是CA发布的),再讲发来的信息进行hash算法,将生成的hash值与CA解密后得到的摘要进行对比。正确则确认信息没被篡改过。这样就得到了发送方的公钥。

    HTTPS过程

    1. 浏览器发出安全请求
    2. 浏览器返回数字证书
    3. 浏览器预置的CA(认证中心)列表公钥对证书进行解密,如果有问题,提示有风险
    4. 浏览器随机生成对称的秘钥,用的到的服务器的公钥进行加密。
    5. 服务器用自己的私钥对信息解密,得到对称秘钥
    6. 浏览器和服务器都知道了对称密钥,利用密钥进行加密传输。
  • 相关阅读:
    DevOps中的测试实践
    jenkins node js插件使用
    jenkins job执行shell时发现node版本跟实际不一致
    ES大批量写入提高性能的策略
    tomcat参数调优
    mongodb常用查询语法
    千锤百炼软工12.17日自评一篇
    千锤百炼软工12.05-12.12
    千锤百炼软工11.28-12.04
    千锤百炼软工11.20-11.27
  • 原文地址:https://www.cnblogs.com/tianzhaohua/p/9698780.html
Copyright © 2011-2022 走看看