• https协议分析


    一:什么是HTTPS

    https全称是超文本传输安全协议,https利用SSL/TLS加密数据包来进行http通信。https开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

    通常,HTTP直接和TCP通信,当使用SSL时,则变成了HTTP先和SSL通信,再由SSL和TCP通信 ,如下图所示。

    一个安全的网络环境包含以下3个方面:

    • 通信内容的保密
    • 通信双方身份的真实
    • 通信内容的完整

    而https的诞生就是为了解决这3个问题。所以可以理解为:HTTP + 加密 + 认证 + 完整性保护 = HTTPS

    二:密码学基本概念

    https中就是应用了各种密码学技术,保证

    1、数字证书 

    一种文件的名称,好比一个人或者机构的名称,能够证明这个人或者机构的真实性。其中包含的信息,用于实现上述功能。其作用类似于生活中的身份证。最简单的证书包含一个公开秘钥、公钥的数字签名,公钥拥有者的信息。

    2、数字签名

    对文件加密只是确保了文件的完整性,通过数字签名的技术可以确定发件人的身份。而如何实现发件人的身份不是伪造的呢,简单来说,数字签名(digital signature)是公钥密码的逆应用:用私钥加密消息,用公钥解密消息。

    生成签名过程:

    一般来说,不直接对消息进行签名,而是对消息的哈希值进行签名,步骤如下。

    1. 对消息进行哈希计算,得到哈希值
    2. 利用私钥对哈希值进行加密,生成签名
    3. 将签名附加在消息后面,一起发送过去

    验证签名过程:

    1. 收到消息后,提取消息中的签名
    2. 用公钥对签名进行解密,得到哈希值1。
    3. 对消息中的正文进行哈希计算,得到哈希值2。
    4. 比较哈希值1和哈希值2,如果相同,则验证成功。

    3、对称加密

    对称加密又叫做共享秘钥加密,加密和解密使用的是同一秘钥。当传输时也必须把密钥传给对方,这就造成密钥传输的安全问题,如果密钥被窃取,那么加密就变得毫无意义。常见的对称加密算法有DES,AES等。

    4、非对称加密

    非对称加密又叫做公开秘钥加密,顾名思义,加密的秘钥是公开的。之所以叫非对称加密,是因为秘钥是一对的,分为公钥和私钥。公钥公开给大家,私钥自己保存,任何人都可以通过公钥加密明文,但只有私钥拥有者才可以通过私钥解读公钥加密后的密文。常见的非对称加密又RSA,DH等

    安全算法

    不使用自己开发的加密算法,而使用没有专利的、安全的、公开的标准加密算法。

    说明:

    1. 当前的专利算法包括但不限于:IDEA。已过专利保护期的加密算法已不再受专利保护;
    2. 不推荐的加密算法包括:DES、MD5、SHA1、HMAC-MD5、HMAC-SHA1;
    3. 对称加密算法建议使用:AES;
    4. 密钥交换算法建议使用:DH;
    5. 数字签名算法建议使用:SHA1withDSA;
    6. 非对称算法建议使用:ECC、RSA;
    7. HASH(哈希)算法建议使用:SHA;
    8. HMAC(基于哈希的消息验证码)算法建议使用:HMAC-SHA;
    9. 建议的各算法建议采用如下的加密强度:

      

    三:HTTPS工作流程

    https工作流程可以分为3个阶段:

    1、认证服务器:客户端确认服务器证书的认证机构是否在受信任的CA机构列表中,从证书中获取服务器的公钥。

    2、协商会话秘钥:客户端通过服务器公钥进行通信,协商出会话密码。这个会话秘钥是对称加密的类型,因为非对称加密算法开销计算量大,不适合对大数据加密。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。

    3、此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。

    四:使用HTTPS的流程

    1、使用openssl等工具生成web服务器的私钥key

    2、使用openssl等工具,结合key以及服务器的其他信息,生成证书请求csr文件

    3、发送csr文件给CA的其中一个机构,支付相应费用,获得服务器证书

    4、通过webServer(Nginx等)中配置Http服务

    总结:

    https就是在http上面加入了ssl/tls协议,保证数据传输的安全性。但由于https比http耗费资源,所以一般比较重要的站点才会用https。

  • 相关阅读:
    快速搞懂.NET 5/.NET Core应用程序的发布部署
    .NET 5 程序高级调试-WinDbg
    mmap出现 Permission denied
    Java int和integer有什么区别 (mybatis踩坑)
    NodeJS mysql timestamp 数据插入失败的问题
    mysql case when 用法
    postcss 源码解析以及运用
    rust漫游
    关于接口设计的思考--我们真的需要这么多入参吗
    详解apollo的设计与使用
  • 原文地址:https://www.cnblogs.com/he1m4n6a/p/9218725.html
Copyright © 2020-2023  润新知