自由、探索、共享
作者:binarystar[matrix]
声明:本文在非盈利性用途可自由传播,转载请保持文章完整性和作者

前言
1.TLS协议探究
1.1.TLS简介
1.2.加密算法
1.3.TLS交互流程
2.HTTPS网站解析
3.MITM
3.1.sslstrip介绍
3.2.MITM Attack

前言
这篇文章是总结一下自己学习HTTPS的心得,通篇没有任何自己想的东西,都是拼凑起来的东西洒。有些东西是从国外看到的,所以还是想写一下,聊胜于无。由于技术和心态问题,此文随时可能烂尾,所以等真的写完了,再来放题目,加上题目正在思考中,哈哈,
首先介绍一下平台环境:
C类IP以太局域网
路由IP:192.168.1.1
我的IP:192.168.1.100
A的IP:192.168.1.104
我的操作系统:BackTrack 5 R1
A的操作系统:windows xp

1.TLS协议探究
1.1.TLS简介
上世纪90年代,随着Internet的迅速发展,网络传输的安全问题日益凸现。如何在一个开放的网络中,实现客户数据的安全传输?1994年 Netscape<网景>公司开发Secure Sockets Layer (SSL) <安全套接层>协议,用于World Wide Web(WWW)上的安全传输。SSL v1.0没有公开发布,1995年发布SSL v2.0,由于存在一系列的问题,1996年推出了稳定的SSL v3.0。不久后, Internet Engineering Task Force (IETF)接手这项工作,以SSL3.0协议为基础在1999年2月发布的RFC2246号文档中,描述了新的 Transport Layer Security (TLS) <传输层安全>协议TLS1.0(SSL3.1)。2006年4月发布的RFC4346号文档中,描述了TLS1.1(SSL3.2)。2008年8月发布的RFC5246号文档中,描述了TLS1.3(SSL3.3)。
在gmail与alipay登录网页的TLS握手部分中,显示的都是TLS1.0(SSL3.1)版本,本文以下内容都基于这个版本。
在TCP/IP协议簇中,他的分层与对应的典型协议如下图所示:

TLS协议加入后,它嵌入在传输层之上,应用程序的数据首先经过TLS协议的加密保护后,再进入运输层向下传递,如图所示:

下面是使用Wireshark1.6.1从https://auth.alipay.com/login/index.htm拦截的1帧数据: 

这是1帧从对方过来到我的机器的数据,所以它所经过的流程就如图中间部分所示:
Frame 60: 1483 bytes on wire (11864 bits), 1483 bytes captured (11864 bits)
        以太网接口所收到的此帧总情况
Ethernet II, Src: Cisco_46:14:94 (00:24:97:46:14:94), Dst: CompalIn_62:ad:4b (1c:75:08:62:ad:4b)
        以太网帧的首部信息
Internet Protocol Version 4, Src: 110.75.132.46 (110.75.132.46), Dst: 192.168.1.100 (192.168.1.100)
        IP协议的首部信息
Transmission Control Protocol, Src Port: https (443), Dst Port: 44492 (44492), Seq: 11678, Ack: 1371, Len: 1429
        TCP协议的首部信息
以上数据从0000 ---- 0035共54字节
从0036 ---- 005CA共1429字节的数据属于TLS协议(Wireshark使用SSL字样)
Secure Sockets Layer
        TLS协议的数据

TLS协议的验证和数据加密都是依赖于现行的几种加密算法,在进入讲解TLS协议的具体内容前,对TLS使用的这些加密算法进行了解。

1.2.加密算法
现代密码学中的加密算法都是基于一些数学难题,比如说大整数因式分解等等。从理论上已经证明是安全的,或者是以现行计算机运行速度,brute- force解密这些算法所付出的时间将只存在理论上的可能。顺便扯上一句,还是有大虾在尝试着从数学角度彻底攻破这些加密算法,其中著名的一位是 中国山东大学教授王小云女士 ,在2004年8月的美国国际密码大会上,她公布她的研究小组近年来的研究成果对MD5、HAVAL-128、MD4和RIPEMD等四个著名密码算法的破译结果,一举成名。
常见的加密算法可以分成三类:Symmetric-key algorithm<对称加密算法>、Public-key cryptography<非对称加密算法或公开密钥加密算法>和Hash算法。下面分别说一下这三类加密算法的流程,按照惯例,我们使用Alice与Bob作为通信的双方,使用Eve作为窃听者:
对称加密算法:
a、Alice根据选择的对称算法计算得到1个密匙数据key1
b、通过某种安全途径,Alice把key1告诉Bob
c、Alice使用key1去加密原始数据,得到密文
d、Alice把密文传给Bob
e、Bob使用key1解密密文,得到原始数据
f、双方交互重复d、e步骤,直至通信结束

对称加密算法的优点在于加解密速度快和使用长密钥时的难破解性。它的不足之处是,密匙必须要提前让Bob知道,否则他就无法解密数据,所以对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密。另一个问题是,每对用户每次使用对称加密算法时,都需要生成其他人不知道的惟一密匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为负担。如果用户有n个,则所有用户相互使用对称算法加密通信就共需要n×(n- 1) 个密钥,如果一个用户使用的密钥被泄露,入侵者便可以读取该用户密钥加密的所有文档,如果数个用户共用一个密钥,那所有通信都将泄露。
常见的对称加密算法有:DES、RC2、RC4、RC5和Blowfish,美国国家标准局提出使用AES取代DES。

非对称加密算法:
a、Alice根据选择的非对称加密算法计算得到1对密匙<key1、key2>
b、Alice把key1<publickey公匙>公开出去,任何人都可以使用key1去加密数据
c、Bob使用key1加密原始数据,得到密文
d、Bob把密文传送给Alice
e、Alice使用自己保留的key2<privatekey私匙>解密密文,得到原始数据
f、Bob重复c、d步骤,直至通信结束
在上面的流程中,b步骤公匙是否开放视具体情况而定。非对称加密算法有1对密匙<key1、key2>,key1加密的数据只有key2能解密,key2加密的数据只有key1能解密。由于私匙保留在自己手中,通信者可以自由决定是否公开公匙,让所有人都可以加密数据传送给自己。或是指定用户传送,只让拥有公匙的用户与自己通信。
再来看一个双方交互使用非对称加密算法的例子
a、Alice根据选择的非对称加密算法计算得到1对密匙<key1、key2>;Bob根据选择的非对称加密算法计算得到1对密匙<keyA、keyB>
b、Alice把key1<公匙>公开;Bob把keyA<公匙>公开
c、Alice使用keyA加密原始数据,得到密文;Bob使用key1加密原始数据,得到密文
d、双方互相传送密文
e、Bob使用自己保留的keyB<私匙>解密Alice的密文;Alice使用自己保留的key2<私匙>解密Bob的密文
f、Alice于Bob重复d步骤,直至通信结束
必须要再强调的是,b步骤双方公匙是否开放视具体情况而定。上面的流程是按照最开放的情况下写的,Eve<窃听者>虽然知道双方的公匙,但是由于没有私匙,他只能够加密数据而不能解密双方的密文。如果b步骤是保密传送的话,Eve将还需要想其他办法先获得双方的公匙!