HTTPS加密流程超详解(一)前期准备
0.前言
前一阵子想写一个HTTPS的嗅探工具,之前只是大致了解SSL/TLS协议的加密流程,真正上起手来一步一步分析发现还是有点复杂的,于是我参考了wireshark的源码以及各种RFC,弄清楚了SSL/TLS从证书传递到密钥交换,再到数据传输的具体过程,算是小有收获,在这里分享给大家。
因为我想结合一个具体的简单的例子来做分析,所以本篇文章先介绍如何简单搭建一个环境来帮助我们下一步的分析,因此不打算亲自动手实践的朋友可以跳过直接进入下一篇,当然本篇文章还是有些小知识点的。
1.前期准备
1.1 制作证书
我们这里使用openssl,由于只是演示,所以就制作个简单的证书,CA签名什么的就不弄了。
生成服务器私钥:
openssl genrsa -out server.key 1024
生成服务器cer证书:
openssl req -new -x509 -key server.key -out server.cer -days 3650
合成pfx文件,会要求输入密码,输不输都可以,如果有密码,之后导入证书都要输入该密码:
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.cer
1.2 导入证书
这里使用IIS搭建web服务,点击IIS根节点,点击右侧Import,选择之前生成好的server.pfx。

添加网站,类型选HTTPS,证书选择刚才导入的证书。

访问网站,忽略一切警告,看看网站有没有搭好。

1.3 更改默认SSL加密套件(Cipher Suites)
因为我们重在分析加密流程,所以我们选择一个简单的加密算法。
运行->gpedit.msc->Administrative Templates->Network->SSL Configuration Settings,双击SSL Cipher Suite Order,里面有一个加密套件的顺序,我们把TLS_RSA_WITH_RC4_128_SHA放到最前面,这样加密就会优先选择该套件。

1.4 配置Wireshark解密SSL
为方便流程分析,我们借用Wireshark解密SSL流量。
打开Wireshark->Edit->Preference->Protocols->SSL
在RSA keys list添加一项,IP填服务器的IP,端口填443,协议填HTTP,key文件选择之前生成的server.key或者server.pfx。SSL debug file随便选择一个路径,SSL加解密的每个步骤都会写入该文件,很有助于我们的分析。

设置好以后,访问网站,抓包可以看到SSL流量已经解密出来了。

查看SSL debug file,可以看到SSL加解密的过程已经非常详细地写到里面了。

至此,我们需要的环境算是搭好了,下一篇文章我们将结合代码,从算法和二进制的角度去详细分析一个完整的HTTPS加密流程。
HTTPS加密流程超详解(一)前期准备的更多相关文章
- HTTPS加密流程超详解(二)
2.进入正题 上篇文章介绍了如何简单搭建一个环境帮助我们分析,今天我们就进入正题,开始在这个环境下分析. 我们使用IE浏览器访问Web服务器根目录的test.txt文件并抓包,可以抓到如下6个包(前面 ...
- https加密解密过程详解
要点: https协议对传输内容进行加密,具有更强的安全性,防止被抓包后解析出请求内容. https是建立在ssl之上的http协议. 服务器支持https协议必须安装一套数字证书,所谓数字证书就是一 ...
- 阿里云slb和ucloud负载均衡ulb添加ssl证书将http服务https化的配置详解
阿里云和ucloud服务器配置ssl证书将http服务https化的配置详解 项目背景: 苹果App于2017年1月1日将启用App Transport Security安全功能,即强制App通过HT ...
- HTTPS加密流程理解
HTTPS加密流程 由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击 HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TC ...
- html5的float属性超详解(display,position, float)(文本流)
html5的float属性超详解(display,position, float)(文本流) 一.总结 1.文本流: 2.float和绝对定位都不占文本流的位置 3.普通流是默认定位方式,就是依次按照 ...
- Mysql超详解
Mysql超详解 一.命令框基本操作及连接Mysql 找到Mysql安装路径,查看版本 同时按快捷键win+R会弹出一个框,在框中输入cmd 点击确定后会出现一个黑框,这是命令框,我们的操作要在这命令 ...
- Mybatis案例超详解(上)
Mybatis案例超详解(上) 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟 ...
- Python3调用C程序(超详解)
Python3调用C程序(超详解) Python为什么要调用C? 1.要提高代码的运算速度,C比Python快50倍以上 2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样 ...
- JUC中的AQS底层详细超详解
摘要:当你使用java实现一个线程同步的对象时,一定会包含一个问题:你该如何保证多个线程访问该对象时,正确地进行阻塞等待,正确地被唤醒? 本文分享自华为云社区<JUC中的AQS底层详细超详解,剖 ...
随机推荐
- J-Link驱动下载和Hex程序下载
J-LINK驱动下载 1.首先拥有硬件J-Link硬件. 2.安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com/downloads/jlink/JLin ...
- Python小爬虫
网页解析器下载网址: http://www.crummy.com/software/BeautifulSoup/ ...
- <p></p>标签为什么不能包含块级标签?还有哪些特殊的HTML标签?
最近,在码代码的时候,就是下面的这段代码,我犯了一个很不起眼,但犯了就致命的BUG. <body> <p> <ol> <li>Hello</li& ...
- [转载] Linux的Top命令解析
转载自http://www.jb51.net/LINUXjishu/34604.html.http://blog.csdn.net/hello_yang213/article/details/7455 ...
- [转载] Redis实现分布式锁
转载自http://zhidao.baidu.com/link?url=m56mmWYwRgCymsaLZ2tx-GWDy5FYmUWGovEtuApjTpktHS3bhofrCS-QVGiLoWeS ...
- [转载] Netty教程
转载自http://blog.csdn.net/kobejayandy/article/details/11493717 先啰嗦两句,如果你还不知道Netty是做什么的能做什么.那可以先简单的搜索了解 ...
- 后端自动化版本管理,再也不用改URL了!
每次升级接口版本时,后端.前端.客户端都是痛苦的: 后端:要兼容旧版客户端,以前的接口不能动啊,又得写新接口.新文档了,唉! 前端:还好,就是版本号到处都是,改起来比较烦. Android:快点啊产品 ...
- iOS打包静态库(完整篇)
1. 什么是库? 所谓库就是程序代码的集合,是共享程序代码的一种方式. 2. 库的分类 根据程序代码的开源情况,库可以分为两类 开源库源代码是公开的,你可以看到具体实现.比如GitHub上比较出名的第 ...
- python 读取本地文件批量插入mysql
Uin_phone.txt 本地文件内容 有1000条,这里只是展示前几条,供参考 133584752 133584759 133584764 133584773 133584775 13358477 ...
- SpringMVC 视图解析器
SpringMVC 视图解析器 还记得SpringMVC 快速入门中,dispatcher-servlet.xml 配置的视图解析器么.它是SpringMVC 的核心知识点.本章节比较简单,明白视图解 ...