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底层详细超详解,剖 ...
随机推荐
- The Lisp Curse /Lisp魔咒
The Lisp Curse /Lisp魔咒 http://winestockwebdesign.com/Essays/Lisp_Curse.html 英文出处 http://www.soimort. ...
- Python异步处理
回调函数是实现异步操作的常用手法 1.callback版本的示例,其中framework调用logic,在完成某些操作或者接收到信号后,用callback返回异步结果 #!/usr/bin/env p ...
- Android drawText 做到文字绝对居中
我们在android中经常会遇到自定义一些组件,因为现有的android组件是往往不能满足当下的需求的,今天就给大家介绍一下在自定义组建过程中用到的drawText不居中的问题的解决方案 首先大家看一 ...
- 系统学习DOM事件机制
本文将从以下几个方面介绍DOM事件: 基本概念:DOM事件的级别 DOM事件模型,事件流 描述DOM事件捕获的具体流程 Event对象的常见应用 自定义事件 DOM事件的级别 //DOM0 eleme ...
- redis数据类型及常用命令介绍(图文实例)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAAFLCAYAAACUdvXUAAAgAElEQVR4nO3da1da58L2fT5KfPvc96 ...
- Fielddata is disabled on text fields by default. Set fielddata=true on [gender] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memor
ES进行如下聚合操作时,会报如题所示错误: ➜ Downloads curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "size ...
- 《java.util.concurrent 包源码阅读》21 CyclicBarrier和CountDownLatch
CyclicBarrier是一个用于线程同步的辅助类,它允许一组线程等待彼此,直到所有线程都到达集合点,然后执行某个设定的任务. 现实中有个很好的例子来形容:几个人约定了某个地方集中,然后一起出发去旅 ...
- Maven多模块的开发项目搭建
系统越复杂,所有的业务逻辑都放在一个项目里,各个包之间的业务逻辑相互调用,这样添加了开发成本,同时对之后的系统维护,错误排查带来一定的麻烦. 通过Maven的多模块开发,把一个系统拆分成多个模块,通过 ...
- C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { ...
- Android开发之漫漫长途 番外篇——自定义View的各种姿势2
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...