HTTPS握手
作用
- 内容加密 建立一个信息安全通道,来保证数据传输的安全;
- 身份认证 确认网站的真实性
- 数据完整性 防止内容被第三方冒充或者篡改
https的采用了对称加密和非对称加密。握手过程中采用非对称加密,得到一个对称加密的秘钥。数据传输的过程中,采用对称加密。
采用非对称加密比较慢,因此只在握手期间采用非对称加密,保证拿到的对称加密的秘钥的安全性,数据传输期间通过对称加密来加密,速度更快。
握手:
对称加密秘钥的生成:
握手期间,client与server两次往来。会生成三个随机数,由这三个随机数组成对称加密的秘钥。
client验证server可靠性:
浏览器第一次收到服务器的ack时,会验证数字证书,一直验证到最顶层的根证书,如果浏览器内置有,则可信,否则不可信。
数据传输:
http报文的内容都会经过TLS层进行对称加密,秘钥是握手时生成的。发送使用秘钥加密,接收时使用秘钥解密。
这里有一个问题,就是利用哪种非对称加密算法,这可能会影响https握手过程中的交换数据。以RSA算法和Diffie-Hellman算法为例,看一下两种加密方式分别经历了什么。

这个是RSA加密的交互过程。
第一个随机数由client生成,第二个随机数由server生成。
第三个随机数由client生成,使用server的公钥加密,并发送给server。第三个随机数即图中的Premaster secret。这个过程中,Premaster secret只有client和server知道,不会泄露。
然后client和server根据三个随机数生成一个session key,即接下来数据传输过程中用到的对称秘钥。
总结来说就是一共生成三个随机数,根据三个随机数创建一个对称加密的秘钥。前两个随机数可以被抓包拿到,但是第三个随机数已经使用非对称加密算法加密过,所以最终生成的秘钥是保密的。
现在的问题就是,对称秘钥的安全靠第三个随机数的不可破解来保证。理论上来说,只要服务器的公钥足够长,那么Premaster secret可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法,改为 Diffie-Hellman算法(简称DH算法)。
下面是DH算法握手的过程:

与上面client使用RSA公钥加密Premaster secret然后传递的server不同的是,由server发送一个server的DH 参数+private key,client发送一个client的DH参数,那么client和server都能分别通过两个DH参数得到Premaster secret。这样就提高了Premaster secret的安全性。
参考文章:
HTTPS握手的更多相关文章
- HTTP与HTTPS握手的那些事
今天我总结了什么是HTTP三次握手,还有HTTPS握手的过程以及为什么HTTPS是安全的. 前提 在讲述这两个握手时候,有一些东西需要提前说明. HTTP与TCP/IP区别? TPC/IP协议是传输层 ...
- Https握手协议以及证书认证
1. 什么是https Https = http + 加密 + 认证 https是对http的安全强化,在http的基础上引入了加密和认证过程.通过加密和认证构建一条安全的传输通道.所以https可以 ...
- HTTPS握手过程
HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密.具体是如何进行加密,解密,验证的,且看下图,下面的称为一次握手. 1. 客户端发起HT ...
- 【密码学】Https握手协议以及证书认证
1. 什么是https Https = http + 加密 + 认证 https是对http的安全强化,在http的基础上引入了加密和认证过程.通过加密和认证构建一条安全的传输通道.所以https可以 ...
- 加密解密(4)SSL协议及HTTPS握手过程
SSL协议 简介 SSL (Secure Sockets Layer 安全套接层)是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性.因特网的 超文本传输协议 (HTTP)使用 ...
- HTTPS 握手过程理解
转自https://www.jianshu.com/p/a3a25c6627ee https://blog.csdn.net/xingtian713/article/details/11953057 ...
- https握手失败案例(一)
OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .read ...
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...
- http和https 握手过程
这几天测试打印机一直出现打印延迟或者不打印的BUG.找了几天也没有发现为啥没有打印或者打印延迟.然后今天公司的研发大佬过来找问题,并开个会,瞬间所有的问题都找出了并且知道怎么解决了.大佬果然还是大佬. ...
随机推荐
- 那些有关求解next数组的算法
next数组的历史 有关字符串的模式匹配算法中,比较容易写出的是朴素的匹配算法也就是一种暴力求解方式,但是由于其时间复杂度为子串长度和主串长度的乘积,例如strlen(subStr) = n,strl ...
- MVC生成图片验证码,可指定位数
前台: <h2>mvc后台生成验证码,可指定位数</h2> <img id="gc" src="GetValidateCode" ...
- storm深入研究
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:He Ransom链接:http://www.zhihu.com/question/23441639/answer/28075 ...
- 【HMM】隐马尔科夫模型
http://www.hankcs.com/nlp/hmm-and-segmentation-tagging-named-entity-recognition.html
- git 分支的创建、合并、删除
基本概念与命令 分支(branch):每次提交,Git都把提交的内容串成一条时间线,这条时间线就是一个分支 . git 分支的创建 git branch branchName git ...
- DropDownList添加客户端下拉事件操作
如果要想给 DropDownList 服务器控件添加客户端下拉事件,我们可以强制给它添加 onchange 事件,尽管在控件中没有这个方法的提示.添加完这个事件还不能达到目的,还要设置 AutoPos ...
- javascript在字符串中提取网址并替换成超链接
var str = " http://wasmip.baidu.com.cn/mip/km/archives/km_archives_main/kmArchivesMain.do?metho ...
- fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
解决方法:设置cpp文件的Precompiled Header属性设置为Not Using Precompiled Headers
- Linux 同步方法剖析--内核原子,自旋锁和相互排斥锁
在学习 Linux® 的过程中,您或许接触过并发(concurrency).临界段(critical section)和锁定,可是怎样在内核中使用这些概念呢?本文讨论了 2.6 版内核中可用的锁定机制 ...
- Android 4.0 Tabhost图标显示不出来
安卓4.0会有这个问题,修改Manifest.xml里面的Theme,找到System Resources,里面有Theme.black,选这个就行了.剩下自己要改背景色什么的这个还是比较easy的吧 ...