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

时间: 2024-08-12 17:12:19

Https握手协议以及证书认证的相关文章

HTTPS协议、TLS协议、证书认证过程解析

一.HTTPS 协议 HTTPS协议其实就是HTTP over TSL,TSL(Transport Layer Security) 传输层安全协议是https协议的核心. TSL可以理解为SSL (Secure Socket Layer)安全套接字层的后续版本. TSL握手协议如下图所示 (注:图片来源于google图片) 在建立TCP连接后,开始建立TLS连接.下面抓包分析TLS握手过程,抓包图片来源于传输层安全协议抓包分析之SSL/TLS (自己没抓到这么完整的包,只能搬运过来了,摔) (1

Nginx 配置https证书认证

一.什么是SSL证书 SL证书全程:SSL安全通道(Secure socket layer(SSL).该安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏:确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准. SSL证书是数字证书的一种,类似于驾驶证.护照和营业执照的电子副本.因为配置在服务器上,也称为SSL服务器证书. SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA(如VeriSign),在验证服务器身份后颁发,具有服务器身份验证和数据传

基于X.509证书和SSL协议的身份认证过程实现(OpenSSL可以自己产生证书,有TCP通过SSL进行实际安全通讯的实际编程代码)good

上周帮一个童鞋做一个数字认证的实验,要求是编程实现一个基于X.509证书认证的过程,唉!可怜我那点薄弱的计算机网络安全的知识啊!只得恶补一下了. 首先来看看什么是X.509.所谓X.509其实是一种非常通用的证书,什么是证书?唉!这么说吧!当两个人需要进行远程通信而又不想让第三个人知道时就必须建立一种安全措施,因为看不到对方的脸,又不能通过电话直接询问对方,就得想点别的办法,比如我设计一个密码,让后发短信告诉你,这样当我们在网上交流之前就可以对一下密码,暗号之类的.确认后就可以证明你的身份了.这

QT https post请求(QNetworkRequest要设置SSL证书,而SSL证书认证有三种,实测成功)

以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/products/Win32OpenSSL.html网页: 2.下载安装包,我下载的是:Win32 OpenSSL v1.0.1c Light安装包,随着时间的推进,这个版本会不断更新的: 3.安装(exe文件)到本地,并且在安装过程中选择将库安装到OpenSSL的安装目录(/bin)下面. 4.

Tomcat使用Https协议的证书申请说明书

Tomcat使用Https协议的证书申请说明书 https协议是http协议的加密版本,即https=http+ssl. 一.相关概念 SSL证书 SSL证书,就是一种安装在服务器上的数字证书.安装了SSL证书的网站,可以使用HTTPS访问,在用户浏览器和网站服务器之间建立一条“SSL加密通道”,在网上交易.网上支付时,让您的交易信息.身份信息.账号密码等机密信息加密传输,防止信息泄露. 同时,SSL证书是由权威CA机构认证网站身份后才能颁发,在证书中显示网站所属单位或个人的真实信息,并通过绿色

SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接:2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息:3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器:4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器.      用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证

EzHttp 使用Https协议时证书如何部署

今天为EzHttp增加了https支持, EzHttp介绍见这里:使用EzHttp框架 开发基于HTTP协议的CS轻应用 服务端启动时会创建自签名证书,并将其绑定到启动参数url对应的端口上. 服务端导出的cer文件(证书的公钥部分)位于服务端程序运行目录下. 复制该文件到客户端目录并调用指定证书文件的初始化函数即可. 问:为什么需要手动部署而不使用客户端连接服务端自动下载? 答:因为是自签名证书,通过标准http协议传输有被劫持的风险. 如12306这种,中间人可以伪造一个名称和创建时间一样的

(转) HTTP &amp; HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)

HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/details/78517364 原文地址:https://www.cnblogs.com/liujiacai/p/8325931.html

HTTP与HTTPS握手的那些事

今天我总结了什么是HTTP三次握手,还有HTTPS握手的过程以及为什么HTTPS是安全的. 前提 在讲述这两个握手时候,有一些东西需要提前说明. HTTP与TCP/IP区别? TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.WEB使用HTTP协议作应用层协议,以封装HTTP 文本信息,然后使用TCP/IP做传输层协议将它发到网络上. 下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI(Open System Interconne