经过基础调研之后,目前准备确认实现方案,完成对https的解码。

之前的调研,传送门: http://www.cnblogs.com/hugetong/p/6670083.html

1. 需求:

  以旁路方式,完成对非PFS协商的https流量完成解码,前提是可以获得服务器私钥。

2. 先寻找几个可参考的开源方案:

  调研阶段已经注意到了它: https://github.com/plashchynski/viewssld

  它还用到了:https://github.com/plashchynski/libdssl

# 编译libdssl,自带文档写的有点小问题
> ./autogen.sh
> ./configure
> make

3. 看viewssld, libdssl的文档和源码。

  文档源码读了个办啦卡及的。

4. 搭个环境先

  参考这个http://www.cnblogs.com/hugetong/p/6670083.html里面有个实验链接:

  4.1 做证书

[root@dpdk http]# openssl req -x509 -nodes -newkey rsa: -keyout testkey.pem -out testcert.pem 

 网页里说,为了可以是用wireshark顺利打开,还需要使用:(本意应该是为了去除密码,因为wireshark支持的不太好。在这里没有密码的情况下,可以不做。)

[root@dpdk http]# openssl rsa -in testkey.pem -out testkey.pem

  经过处理前后的密钥对比:

[root@dpdk http]# cat testkey-new.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC5a2FqNfaHVbZdfKQgWLV2cle4f8J633dVaaedyokUbhj2n0BR
NxMd/Jh16o5tPLqs96SmDTiMvZmS7lRz4w1SpXiY78VOm8j1C3WWNR/nkilyQyz3
ri9kqwmPeVNVn0gL/JvmlkduIWVCj6zX3AqhBCGuQhL6iYvb8UPLz0J2pwIDAQAB
AoGAbKDfWnUw8Eqj45NRKG4wKauFft7Clm/zHsQeYhA1TRXPZDUaXjpQ5eGFhJed
R5wrlYgkGvBl7/ZoUa91JMuhkol8XbnTGanbGZENCByvdRmu5BUizU/LwWb6pl8J
tDM40RphJ+QShGWJvdQOP87+pvLAwAaEUSAZNpD5xFZCpIkCQQDZ+mcaz635EqQX
yIxopqbBNa0jOXfZK4UuBLDdL3zePYResQ+lvCJwnNbZ/47qdWUZG+PH3ANIt50B
PT6OhtADAkEA2cMaKuKaDGF+5ZcRUlPId14GgahyU4tjqtaFbVOmvcs++rv/lVl6
uRVC+qOBK1xY1tC5ug3XxeXBzM/nDsX3jQJALS1v1ye6CAhsCB3htALuRtcoJkfP
5ivV8363ZXBlMe6QE8wg0RnYDX0ELrR/22ovZO/Z2t9nsteTa+FUqNeaHwJBAJZe
0kgA2A1qmZzit3RZJJnA1M9dySyFmVpT7ijzVbXDjobHoRK5ijQaSXkXxM9zYmlc
EpQ2kOQ35p6Oheg+rdUCQA+bPrUJNkyWPQfsqHp036ECDEg/7YjhRqyzCJ6+KMRq
nDR66pKN0b/uLJi7f0DnATd7gYuNR3BMlAf6OWm6TDI=
-----END RSA PRIVATE KEY-----
[root@dpdk http]# cat testkey-org.pem
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALlrYWo19odVtl18
pCBYtXZyV7h/wnrfd1Vpp53KiRRuGPafQFE3Ex38mHXqjm08uqz3pKYNOIy9mZLu
VHPjDVKleJjvxU6byPULdZY1H+eSKXJDLPeuL2SrCY95U1WfSAv8m+aWR24hZUKP
rNfcCqEEIa5CEvqJi9vxQ8vPQnanAgMBAAECgYBsoN9adTDwSqPjk1EobjApq4V+
3sKWb/MexB5iEDVNFc9kNRpeOlDl4YWEl51HnCuViCQa8GXv9mhRr3Uky6GSiXxd
udMZqdsZkQ0IHK91Ga7kFSLNT8vBZvqmXwm0MzjRGmEn5BKEZYm91A4/zv6m8sDA
BoRRIBk2kPnEVkKkiQJBANn6ZxrPrfkSpBfIjGimpsE1rSM5d9krhS4EsN0vfN49
hF6xD6W8InCc1tn/jup1ZRkb48fcA0i3nQE9Po6G0AMCQQDZwxoq4poMYX7llxFS
U8h3XgaBqHJTi2Oq1oVtU6a9yz76u/+VWXq5FUL6o4ErXFjW0Lm6DdfF5cHMz+cO
xfeNAkAtLW/XJ7oICGwIHeG0Au5G1ygmR8/mK9XzfrdlcGUx7pATzCDRGdgNfQQu
tH/bai9k79na32ey15Nr4VSo15ofAkEAll7SSADYDWqZnOK3dFkkmcDUz13JLIWZ
WlPuKPNVtcOOhsehErmKNBpJeRfEz3NiaVwSlDaQ5Dfmno6F6D6t1QJAD5s+tQk2
TJY9B+yoenTfoQIMSD/tiOFGrLMInr4oxGqcNHrqko3Rv+4smLt/QOcBN3uBi41H
cEyUB/o5abpMMg==
-----END PRIVATE KEY-----

  4.2 放一个index.html在当前目录,然后启动服务

[root@dpdk http]# openssl s_server -key testkey.pem -cert testcert.pem -WWW -cipher RC4-SHA -accept 

  4.3 使用浏览器访问,报错:(或许是协商有问题吧)

:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c::
ACCEPT
:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c::
ACCEPT
:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c::
ACCEPT

  4.4 重新调整:

[root@dpdk http]# openssl s_server -key testkey.pem -cert testcert.pem -accept  -www -no_ecdhe -no_dhe

  抓包并使用wireshark解码打开。

5. 再找找,其他实现

  http://ssldump.sourceforge.net/

  https://tls.mbed.org/

  https://tls.mbed.org/openssl-alternative

6. 编译ssldump。编之前需要打个patch,做些修改(来自AUR的pkgbuild)

prepare() {
cd $pkgname-$pkgver
patch -Np0 -i ../openssl-0.9..patch
sed -i 's/libpcap.a/libpcap.so/g' configure
sed -i 's/BINDIR=@sbindir@/BINDIR=@bindir@/' Makefile.in
} build() {
cd $pkgname-$pkgver
# Arch64 fixes --build/host
./configure --prefix=/usr \
--mandir='${prefix}/share/man' \
--build=i686-pc-linux-gnu \
--host=i686-pc-linux-gnu
make
}

7. 读ssldump代码。

8. 项目时间进度比较紧,直接用libdssl实现。调研过程中发现有其他商业项目也在使用,应该稳定性还不错。时间充裕的时候,还是要对其代码详细阅读。

9. libdssl 竟然只支持SSL2.0和SSL3.0, 仔细一看,最后一次更新竟然是5年前。直接换另一个fork。

https://github.com/Correlsense/libdssl

10. 抓些ssl2和ssl3的测试包.

  chrome / firefox 由于安全问题已经禁用了ssl3版本,最低版本是tls1.0 即使在选项里打开了,也无法使用。。。

连新版本的openssl都不支持了。。。。

/home/tong/Data/https [tong@T7] [:]
> openssl version
OpenSSL 1.1.0e Feb /home/tong/Data/https [tong@T7] [:]
> openssl s_client - -ssl3 -connect dpdk:
s_client: Option unknown option -ssl3
s_client: Use -help for summary. /home/tong/Data/https [tong@T7] [:]
>

还好旧版本的目前还支持

[root@dpdk https]# openssl s_server -key testkey.pem -cert testcert.pem -accept  -www -no_ecdhe -no_dhe -ssl3
[root@dpdk ~]# openssl version
OpenSSL 1.0.1e-fips Feb
[root@dpdk ~]# openssl s_client -connect 127.0.0.1: -ssl3 #成功之后,输入一个GET /回车。 SSL2 同上。

这组包还是非常珍贵的啊,以后都抓不到啦。

11. 两个dssl库里边都有Segmentation fault

Program received signal SIGSEGV, Segmentation fault.
n ssl3_decode_client_hello (sess=0xcbf8d0, data=0x7fffea52f4cb "\003", len=) at ssl_decode_hs.c:
sess->handshake_start = sess->last_packet->pcap_header.ts;

sess->last_packet是null,只能查下源码打个patch上去了。

fork了,并打了patch https://github.com/tony-caotong/libdssl

12. 集成入主进程后,分别对不同应用场景进行测试,包括无密码的私钥,有密码的私钥,错误的私钥,错误密码的私钥。ssl2,ssl3, tls1 tls1.1 tls1.2等。均通过。

13. 遗留问题: 当解码过程中明显发现密钥错误时,是否应该将密钥从密钥列表里移除,从而不再对后续的包识别为可解码的https?

  但是解码错误的情况各有不同,还需要对状态机进行关注,才好从不同情况下判断是否需要移除。

  因为目前可以设想到的有一种情况是不应该排除的:比如一组恶意的错包就不应该导致程序将密钥移除。

14: TODO  读协议 RFC

[dev][https] 非PFS协商的https的流量的解码的更多相关文章

  1. ISA 连接非443端口的https站点提示错误

    ISA 连接非443端口的https站点提示错误:12204 The specified Secure Sockets Layer (SSL) port is not allowed. ISA Ser ...

  2. 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt387 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 ...

  3. 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt388 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与 ...

  4. 【百度】大型网站的HTTPS实践(三)——HTTPS对性能的影响

    HTTPS在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS也会降低用户访问速度,增加网站服务器的计算资源消耗.本文主要介绍HTTPS对性能的影响. HTTPS对访问速度的影 ...

  5. 【百度】大型网站的HTTPS实践(一)——HTTPS协议和原理

    大型网站的HTTPS实践(一)——HTTPS协议和原理 原创 网络通信/物联网 作者:AIOps智能运维 时间:2018-11-09 15:07:39  349  0 前言 百度于2015年上线了全站 ...

  6. 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响(转)

    原文链接:http://op.baidu.com/2015/04/https-s01a02/ 1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降 ...

  7. 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理(转)

    原文链接:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本 ...

  8. 【百度】大型网站的HTTPS实践(二)——HTTPS加密算法介绍

    大型网站的HTTPS实践(二)——HTTPS加密算法介绍 原创 网络通信/物联网 作者:AIOps智能运维 时间:2018-11-09 15:09:43  358  0 前言 在上一篇文章中,我们简要 ...

  9. Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置

    Tomcat8配置Https协议,Tomcat配置Https安全访问,Tomcat Https配置 ============================== ©Copyright 蕃薯耀 2017 ...

随机推荐

  1. [ci]jenkins-slave-ssh docker容器化-自动注入key

    jenkins server 再启动slave时候,动态的注入sshkey 只要slave有ssh+jdk即可.无需事先预置用户名密码给slave. 配置 inject ssh key 配置项目 执行 ...

  2. python thrift使用实例

    前言 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Python开发人员角度简单介绍 Apache Thrift 的架构.开发和使 ...

  3. 【iCore4 双核心板_ARM】例程十三:SDIO实验——读取SD卡信息

    实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); usart6.initialize(); usart ...

  4. ELK 性能(4) — 大规模 Elasticsearch 集群性能的最佳实践

    ELK 性能(4) - 大规模 Elasticsearch 集群性能的最佳实践 介绍 集群规模 集群数:6 整体集群规模: 300 Elasticsearch 实例 141 物理服务器 4200 CP ...

  5. Java知多少(95)绘图基础

    要在平面上显示文字和绘图,首先要确定一个平面坐标系.Java语言约定,显示屏上一个长方形区域为程序绘图区域,坐标原点(0,0)位于整个区域的左上角.一个坐标点(x,y)对应屏幕窗口中的一个像素,是整数 ...

  6. C# 内存理论与实践

    The C# Memory Model in Theory and Practice Best Practices All code you write should rely only on the ...

  7. java多线程系列(四)---ReentrantLock的使用

    Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...

  8. 设置Git用户信息

    $ git config --global user.name "leehongee" //给自己起个用户名 $ git config --globla user.email &q ...

  9. LeetCode_1. Two Sum_Solution

    原题链接 原题中文链接 一.题目描述 二.题目分析 1,常规解法 这道题目的意思是给定一个数组和一个值,要求出这个数组中两个值的和等于这个给定值target. 输出是有要求的: 坐标较小的放在前面,较 ...

  10. 设计模式-结构型模式, mvc 模型视图控制器模式(8)

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO.它 ...