关于国密HTTPS 的那些事(二)

三. 需要解决的问题

前文我们了解了https,并梳理了国密https的流程。那么完成这些流程的目的是什么呢?又是怎么来保护数据的安全性呢?我们继续...

上文我们说到只有http通信的站点如同在“裸奔”,在客户端和服务端通信的时候有巨大的安全隐患。而安全隐患主要有三个方面:明文传输,数据篡改,站点劫持。

知道了问题,我们只需要对症下药:

明文传输 ->数据加密传输。

数据可篡改->数据完整性校验。

站点劫持->验证站点的身份。

还不够清楚,我们再深入一点,将上面的箭头继续往下衍生:

明文传输 ->数据加密传输- >需要一个只有客户端和服务端知道的对称秘钥(因为对称秘钥比非对称秘钥效率高)-->秘钥协商。

数据可篡改->数据完整性校验->对数据进行哈希计算并签名-->客户端和服务端采用同一种数据检验的算法

站点劫持->验证站点的身份->客户端验证服务端提供的证书是否可信->证书由可信的CA机构颁发(如沃通CA等)

差不多了,SSL/TLS协议的目的慢慢的就凸显出来了。知道了SSL/TLS的目的,我们再回过头看协议,理解起来就相对容易的多。

之前我们也说到了SSL/TLS协议都分为记录协议和握手协议,而他们目的就是服务客户端和服务端双方来来回回的进行数据通信。

先介绍他们的主要功能,如下:

记录层协议:将要发送的消息,把数据分块,压缩(可选),计算校验码HMAC,加密然后传输。接收到的数据经过解密、验证、解压缩重新封装然后传送给高层应用。

握手协议:主要用于客户端和服务端双方协商出供记录层使用的安全参数,进行身份验证以及向对方报告错误等。

接着我们来看SSL/TLS是如何达到自己的目的的,再此之前我们首先需要介绍另一个概念-- 加密套件 。

四.关于加密套件

如果将客户端和服务端比喻成“牛郎”和“织女”,那么加密套件就如同连接双方的“鹊桥”。

加密套件为什么如此重要呢?因为加密套件就定义了他们如何协商对称秘钥,采用哪种算法对数据进行校验以及签名,加密套件是双方建立连接的基础。

就是因为有了它,“牛郎”和“织女”才能顺顺利利的在七夕相遇。

我们看加密套件由那几部分组成,看下图。

除了协议部分,主要是由:秘钥交换认证算法加密算法摘要算法这四部分组成

加密套件是协议里面约定的。每个加密套件都有一个ID号。比如0XC02C就是代表了上面的加密套件。

只有客户端和服务端有同样的加密套件(有交集),才能通过握手建立https通道。如客户端支持这个加密套件,服务端也支持这个加密套件,那么双方就可以选择双方都支持的这个加密套件进行握手。按加密套件中约定的算法进行数据加密,签名和交换。

我们在使用抓包工具的时候,就能看到在候客户端在Client_Hello里就携带了自己能支持的加密套件,为什么发送这么多呢?因为客户端也不知道服务端支持哪些加密套件,所以客户端先把自己支持的加密套件发送给服务端,让服务端根据自身的协议进行选择。在实际的应用中,如果客户端支持的加密套件很多,那么客户端会逐步的把所有支持的加密套件都发送给服务端,供服务端选择。此时客户端的独白是:“我已经尽力了,成不成就看缘分了”。服务端接收到客户端的加密套件后,如果正好有自己支持的加密套件--恭喜,配对成功(当然服务端也是有选择权的可以配置选择的优先级,当有遇到多个支持的加密套件时候优先选择一些安全性更高的加密套件)。如果客户端发送的加密套件服务端都不支持,那只能回复客户端,期待下一次的缘分了。所以,作为服务端,在保证安全的情况下,尽量支持多的套件和协议,这样才有更好的兼容性。

现在我们看到抓包工具中的一长串的加密套件,就不奇怪了。原来他们都是期待在茫茫人海中,被“选中”的一个,见下图。

好了,今天就聊这么多。下文我们接着揭露协议中握手双方的来来回回的背后,到底还隐藏了哪些不为人知的秘密!

关于国密HTTPS 的那些事(二)的更多相关文章

  1. 关于国密HTTPS 的那些事(一)

    关于国密HTTPS 的那些事(一) 随着<密码法>密码法的颁布与实施,国密的应用及推广终于有法可依.而对于应用国密其中的一个重要组成部分----国密HTTPS通信也应运而生.为了大家更好的 ...

  2. Linux实现树莓派3B的国密SM9算法交叉编译——(二)miracl库的测试与静态库的生成

    先参考这篇文章 Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署.简单测试与eclipse工程项目测试 部署好环境,并简单测试交叉编译环境是否安装成功,最后实现在Eclipse上进行 ...

  3. Linux实现树莓派3B的国密SM9算法交叉编译——(三)国密SM9算法实现

    先参考这篇文章 Linux实现树莓派3B的国密SM9算法交叉编译——(二)miracl库的测试与静态库的生成 进行miracl库的交叉编译测试,并生成miracl静态链接库. 这篇文章主要介绍基于mi ...

  4. C#.NET 国密SM3withSM2签名与验签 和JAVA互通

    C# 基于.NET FRAMEWORK 4.5 JAVA 基于 JDK1.8 一.要点 1.签名算法:SM3withSM2. 2.签名值byte[] 转字符串时,双方要统一,这里是BASE64. 二. ...

  5. 谈谈PBOC3.0中使用的国密SM2算法

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/39780825 作者:小马 一 知识准备 SM2是国密局推出的一种他们自己说具有自主 ...

  6. 国产芯片任重道远 国科微SSD主控芯片的“追赶之路”(不能只提供一颗芯片,而是要将芯片、国密算法、固件Firmware、BIOS和操作系统紧密联系在一起,变成完整解决方案交给行业用户,才能真正体现自身的价值)

    集微网消息,“中国芯”战略之路道阻且长,踏入这个赛道的攻坚者们需要十年如一日的技术突破,需要集合产业势能,共同协作,方能建立中国核心技术真正的竞争力. 国产化之路任重道远,SSD芯片初见成效 信息时代 ...

  7. bouncycastle 国密SM2 API的使用

    摘要:本文不对SM2做过多的介绍,主要介绍java bouncycastle库关于SM2的相关API的使用及注意事项 1. SM2 签名: 注意: 1)签名格式ASN1(描述了一种对数据进行表示.编码 ...

  8. Hyperledger Fabric密码模块系列之BCCSP(五) - 国密算法实现

    Talk is cheap, show me your code. 代码也看了,蛋也扯了,之后总该做点什么.响应国家政策,把我们的国密算法融合进去吧--  先附两张bccsp下国密算法的设计实现图. ...

  9. Bytom国密网说明和指南

    比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 国密算法 ...

随机推荐

  1. vim conf文件配色

    VIM conf文件配色 一.配置文件 1.下载Nginx配置文件的语法文件:nginx.vim wget http://www.vim.org/scripts/download_script.php ...

  2. 图解Java 垃圾回收机制

    摘要: Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区.关于对象 ...

  3. 恶意软件开发——内存相关API

    一.前言 Windows操作系统的内存有三种属性,分别为:可读.可写.可执行,并且操作系统将每个进程的内存都隔离开来,当进程运行时,创建一个虚拟的内存空间,系统的内存管理器将虚拟内存空间映射到物理内存 ...

  4. Ubuntu 16.04LTS下eclipse连接mysql

    第一部分:打开eclipse,新建一个web工程,新建一个类db_test.java(jdbc连接mysql的原理自行百度) import java.sql.*; public class db_te ...

  5. IDEA常用设置及推荐插件

    IDEA常用设置及推荐插件 本文主要记录IDEA的一些常用设置,IDEA与Eclipse的常用快捷键对比及推荐一些好用的插件. 基本设置 设置界面风格及修改外部UI尺寸大小 打开IDEA时设置不重新打 ...

  6. php检测数组长度的函数sizeof count

    php教程检测数组长度的函数sizeof count在php检测数组长度的函数有sizeof  count 下面看个简单实例*/$colorlist = array("apple" ...

  7. Google Chrome浏览器必备的20个插件

    Google Chrome浏览器虽然与火狐浏览器有所区别,不过他们都是很开放的浏览器产品,所以也有许多有用的插件,这些插件对于日常生活与网络冲浪都很有用,比如网银,炒股等. Google Chrome ...

  8. Java编程:为什么Class实例可以不是全局唯一

    通过定义两个类加载器加载同一字节码文件来证明Class实例为什么不是全局唯一的 1.将一个名为Demo(没有后缀)的字节码文件放在D盘根目录 2.定义两个类加载器 自定义ClassLoader三要素: ...

  9. 云原生 AI 前沿:Kubeflow Training Operator 统一云上 AI 训练

    分布式训练与 Kubeflow 当开发者想要讲深度学习的分布式训练搬上 Kubernetes 集群时,首先想到的往往就是 Kubeflow 社区中形形色色的 operators,如 tf-operat ...

  10. 聊聊 Jmeter 如何并发执行 Python 脚本

    1. 前言 大家好,我是安果! 最近有小伙伴后台给我留言,说自己用 Django 写了一个大文件上传的 Api 接口,现在想本地检验一下接口并发的稳定性,问我有没有好的方案 本篇文章以文件上传为例,聊 ...