Https握手协议以及证书认证
1. 什么是https
Https = http + 加密 + 认证
https是对http的安全强化,在http的基础上引入了加密和认证过程。通过加密和认证构建一条安全的传输通道。所以https可以看成是:在安全通道内,对数据进行对称加密后传输。这样即使黑客打破了安全通道,还有一层数据加密。极大的保障了数据通信的安全性。
2. https的演化
我们将从http的不安全方面着手,通过三个场景的阐述,来说明https是怎么来的以及其基本原理
Round 1:
正常交流:
“客户”->“服务器”:你好
“服务器”->“客户”:你好,我是服务器
这是一次正常的客户端和服务器的交流。中间没有任何安全校验,客户端得知对方是服务器后,就完全的相信了对方就是自己想要的服务器。这种情况下,服务器如果收到攻击,有人伪造是服务器,客户端也是不知情的。既然知道了这种通信的不安全,所以引入了RSA加密,说明下:用RSA私钥进行加密,RSA公钥进行解密的是签名;公钥加密,私钥解密的是加密。于是有第二轮的通信
Round 2:
“客户”->“服务器”:你好
“服务器”->“客户”:你好,我是服务器
“客户”->“服务器”:向我证明你就是服务器
“服务器”->“客户”:你好,我是服务器 {***********}(对内容用私钥进行签名)
“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}{***********}(对内容用私钥进行RSA加密)
“服务器”->“客户”:{你的余额是100元}{***********}(对内容用私钥进行签名)
在第二轮通信中,服务器通过RSA私钥进行签名,客户端用RSA公钥进行验证来达到 确定服务器身份。虽然引入了RSA加密后,服务器的身份是被唯一确认了,但是由于服务器的后续所有的信息都是通过RSA私钥进行加密,而公钥是对外公开的,这样会导致服务器的所有内容对其他人都是公开的。所以这次通信同样存在安全问题。
Round 3:
“客户”->“服务器”:你好
“服务器”->“客户”:你好,我是服务器
“客户”->“服务器”:向我证明你就是服务器
“服务器”->“客户”:你好,我是服务器 {***********}(对内容用私钥进行RSA加密)
“客户”->“服务器”:{我们后面的通信过程,用对称加密来进行,这里是对称加密算法和密钥} {***********}(对内容用公钥进行RSA加密)
“服务器”->“客户”:{OK,收到!}{***********}(用双方协商的密钥进行加密-- 对称加密算法)
“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看} {***********}(用双方协商的密钥进行加密-- 对称加密算法)
“服务器”->“客户”:{你的余额是100元}[密钥|对称加密算法]{***********}(用双方协商的密钥进行加密-- 对称加密算法)
在第三轮通信包括了两部分,第一部分是用非对称加密算法来进行身份认证。第二部分,信息通信用了对称加密算法进行加解密。这也就就是https构建安全通道的基本流程。
3.证书
在第三轮通信的第一部分,虽然用非对称加密算法来进行身份认证可以很安全,但是随之的问题是如何把RSA的公钥给客户端,如果用传统方式:用网络发送或是在通信过程中携带公钥,都会存在公钥被篡改的情况。为了解决这个问题,所以才有了数字证书的出现。通过一个大家都认可的,并且是可信的第三方来颁发。
数字证书一般包括:
- 证书的发布机构
- 证书的有效期
- 公钥
- 证书所有者(Subject)
- 签名所使用的算法
- 指纹以及指纹算法
这样,服务器在身份认证阶段就不需要把公钥发给客户端了,而是把服务器端的证书发给客户端,客户端拿到服务器证书后,通过验证证书来完成身份认证。一般证书认证包括:证书的有效期,证书链的验证。证书链的验证是通过根证书对证书进行一级一级的认证。证书链的认证过程如下图所示:

证书认证成功后,接下来就可以使用服务器证书里面的公钥进行服务器身份的验证。
第一部分是用非对称加密算法来进行身份认证。同时引入了数字证书来达到保护密钥的安全。
4. DH密钥交换算法
在上面第三轮通信中,第一部分身份认证是通过非对称加密算法,可以保证其安全性,但是第二部分,由于用的是对称加密算法,那么如果保证密钥不被截获是整个通信安全的重点。在https里用的是DH密钥交换算法。它的安全性是依赖于离散对数的难解性得到保证。下面简单介绍下DH密钥交换算法。在介绍前先看几个数学上的名词
3.1 生成元
对于一个素数q,如果数值 a mod q, a^2 mod q, a^3 mod q,... a ^q-1 mod q 是各不相同的整数,并且以某种排列方式组成从1到q-1,则整数a就为素数q的一个生成元,或称元根。比如5就是23的一个生成元
3.2 离散对数
对于一个整数b和一个素数q的生成元a,可以找到一个唯一的指数i,使得:
b = a^i mod q (0 <= i <= q-1)
则指数i称为b的以a为底数的模q的离散对数。
对于给定的a,i,q可以很容易的计算出b,但是对于给出b,a,q却是很难计算出i。这就是DH算法和许多公钥密码算法的基础。
3.3 DH密钥交换过程
用户A和用户B共享素数q以及其生成元a,现在A和B进行密钥交换
用户A:产生随机数Xa < q,计算Ya = a^Xa mod q ,同时把Ya发送给B
用户B:产生随机数Xb < q,计算Yb= a^Xb mod q,同时把Yb发送给A
A拿到Yb后:计算Ka = (Yb)^Xa mod q
B拿到Ya后,计算Kb = (Ya)^Xb mod q
最后的结果是:Ka = Kb
证明过程这里就省略了,用代入法很快就可以证明出Ka = Kb
而这里的K就是A和B双方协商的密钥
5. 握手协议
通过上述,我们可以知道整个https的过程其实包括以下几个过程:证书认证,身份认证,密钥交换,传输数据的加解密,下面是一个完整的https握手协议的流程:

上述https演化一节参考了:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
Https握手协议以及证书认证的更多相关文章
- 【密码学】Https握手协议以及证书认证
1. 什么是https Https = http + 加密 + 认证 https是对http的安全强化,在http的基础上引入了加密和认证过程.通过加密和认证构建一条安全的传输通道.所以https可以 ...
- HTTPS协议、TLS协议、证书认证过程解析
一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (S ...
- 002. https通信(CA证书认证 + 密钥商定 )
服务端与客户端建立https通信的过程: 一.认证:客户端第一次访问服务端时,要求服务端证明自己可被信任 1.证书:由服务端申请.第三方CA颁发的,存放在服务端的证书: 证书包含:服务端的公钥.服务端 ...
- 谈HTTPS中间人攻击与证书校验(二)
上文说到HTTPS的三次握手:http://www.cnblogs.com/wh4am1/p/6616851.html 不懂的再回头去看看 三.中间人攻击 https握手过程的证书校验环节就是为了识别 ...
- 加密解密(4)SSL协议及HTTPS握手过程
SSL协议 简介 SSL (Secure Sockets Layer 安全套接层)是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性.因特网的 超文本传输协议 (HTTP)使用 ...
- TLS握手协议分析与理解——某HTTPS请求流量包分析
https://xz.aliyun.com/t/1039 HTTPS简介 HTTPS,是一种网络安全传输协议,在HTTP的基础上利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护 ...
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...
- QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种,实测成功)
以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com ...
- QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种)
因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/product ...
随机推荐
- 抽象类 abstract 和 接口 interface 类的区别
在看一些框架的优秀改良时,都会设计一层base层,并且 base里面一般都是 abstract 类,然后 就找了为什么做的原因.发现: PHP5支持抽象类和抽象方法.抽象类不能直接被实例化,你必须先继 ...
- IOS获取经度纬度
仔细研究了一下SDK文档,再结合网上的方法,写了这一个简单的获取经纬度的方法,大家看看就好. 首先要导入CoreLocation.Frame 包 .h 文件 1 2 3 4 5 6 7 8 9 #im ...
- Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport
Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Xcode7 beta 网络请求报错:The ...
- Java各种工具下载
http://yunpan.cn/cyUzqFTu8pEER 提取码 355c myeclipse2013 http://yunpan.cn/cyUzPi7nC8Z9S 提取码 fc4b my ...
- CardboardSDK-iOS 源码简单分析
该项目地址: 地址 克隆地址为 https://github.com/rsanchezsaez/CardboardSDK-iOS.git 目前如果想在iOS设备上实现双目VR的功能,Google 已经 ...
- 蓝桥网试题 java 基础练习 01字串
---------------------------------------------------------------------- 还括以 0.0 --------------------- ...
- QML Object Attributes QML对象属性
QML Object Attributes Every QML object type has a defined set of attributes. Each instance of an obj ...
- 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
1.自我赋值是如何发生的 当一个对象委派给自己的时候,自我赋值就会发生: class Widget { ... }; Widget w; ... w = w; // assignment to sel ...
- OSS项目进度(2.19)
前两周先后完成了OSS.Common ,OSS.Http ,OSS.Social 项目的.net standard支持,再次开始进入框架本身的开发,今天进度情况: 一.OSS.Social 完成摇一摇 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(82)-Easyui Datagrid批量操作(编辑,删除,添加)
前言 有时候我们的后台系统表单比较复杂,做过进销存或者一些销售订单的都应该有过感觉 虽然Easyui Datagrid提供了行内编辑,但是不够灵活,但是我们稍微修改一下来达到批量编辑,批量删除,批量添 ...