SSL入门以及运用Wireshark破解Https(SSL)会话

http://blog.csdn.net/ackroyd/article/details/7854821

SSL概念:

Internet上对应的七层网络模型的每一层都已经提出了相应的加密协议。SSL是工作于网络会话层(Socket Layer)的网络安全协议。为数据通讯提供安全支持。
SSL入门以及运用Wireshark破解Https(SSL)会话_第1张图片

总之,SSL协议的整个概念可以总结为:一个保证任何安装了安全套阶层的客户和服务器间事务安全的协议,它涉及所有的TCP/IP应用程序。该协议工作在传输层之上,应用层之下,其底层是基于传输层可靠的流传输协议(TCP)。

 

SSL协议可分为两层:

1、            SSL记录协议(SSLRecord Protocol)

它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。

 

2、            SSL握手协议(SSLHandshake Protocol)

它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

 

SSL协议提供的服务主要有:

  1)认证用户和服务器,确保数据发送到正确的客户机和服务器;

  2)加密数据以防止数据中途被窃取;

  3)维护数据的完整性,确保数据在传输过程中不被改变。

详细见: http://wenku.baidu.com/view/7c897b29915f804d2b16c148.html

 

https是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL,因此加密的详细内容必须看SSL。

 

HTTPS 建立安全连接过程

当我们与一个网站建立https连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:

1. 用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。

2. 服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。

3. 客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续。

4. 客端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器。

5. 如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。

6. 如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的pre-master secret,并用它通过某些算法生成本次会话的master secret。

7. 客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。

8. 户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。

9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。

10. 本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。

 

      “ 此前我一直对https/ssl如何保护数据不被窃听有点疑问,因为服务器的证书是公开的,只能实行上行方向的数据加密,下行数据的加密我一直认为是浏览器会自动生成一个客户端的密钥对并将公钥发给服务器。今天仔细研究了https/ssl,发现其实并不像我想的那样,这里面既有非对称加密,又因为性能原因使用了对称加密。其原理大概是这样的:

客户端浏览器连接到https/ssl服务器,并发送ssl版本号等信息到服务器,协商此次连接使用的版本和参数

服务器根据客户端发来的协商数据和自身支持的特性返回客户端协商参数,并且将服务器的证书发送给客户端,服务器的证书里包括用于非对称加密的服务器的公钥

客户端收到服务器的证书,可以用于鉴别服务器身份,防止假冒的服务器。但最重要的用处是将一段由客户端浏览器随机生成的数据pre-master secret用服务器证书里的公钥进行加密,发给服务器。注意,因为这段加密的数据只由用服务器的私钥才能解密,所以pre-master secret不会被人监听到。

服务器收到加密后的pre-master secret数据后,用自己的私钥解密得到原始的pre-master secret,并使用一定算法得到对称加密的密钥master secret。

客户端也根据同样的算法得到master secret

至此,客户端和服务器之间的上/下行数据传送使用对称加/解密,初始密钥为master secret。常用的对称加密算法有RC4,AES等。

经过这些步骤就可以保证https/ssl上下行数据不被监听并且加/解密速度也可以接受。”

Note: from http://blog.csdn.net/luminji/article/details/4012584

简单的说便是:SSL客户端(也是TCP的客户端)在TCP链接建立之后,发出一个Clienth*llo来发起握手,这个消息里面包含了自己可实现的算 法列表和其它一些需要的消息,SSL的服务器端会回应一个Serverh*llo,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了 身份和自己的公钥)。Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去,SSL服务器端用自己的私钥解密后,会话密钥 协商成功,双方可以用同一份会话密钥来通信了。公匙只是用于加密秘密消息,而不是以后通话的数据,这个秘密消息才是用来加密以后通话的数据

如果上面的说明不够清晰,这里我们用个形象的比喻,我们假设A与B通信,A是SSL客户端,B是SSL服务器端,加密后的消息放在方括号[]里,以突出明文消息的区别。双方的处理动作的说明用圆括号()括起。 


A:我想和你安全的通话,我这里的对称加密算法有DES,RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。 


B:我们用DES-RSA-SHA这对组合好了。 
这是我的证书,里面有我的名字和公钥,你拿去验证一下我的身份(把证书发给A)。 
目前没有别的可说的了。 


A:(查看证书上B的名字是否无误,并通过手头早已有的CA的证书验证了B的证书的真实性,如果其中一项有误,发出警告并断开连接,这一步保证了B的公钥的真实性) 
(产生一份秘密消息,这份秘密消息处理后将用作加密密钥,加密初始化向量和hmac的密钥。将这份秘密消息-协议中称为 per_master_secret-用B的公钥加密,封装成称作ClientKeyExchange的消息。由于用了B的公钥,保证了第三方无法窃听) 
我生成了一份秘密消息,并用你的公钥加密了,给你(把ClientKeyExchange发给B) 
注意,下面我就要用加密的办法给你发消息了! 
(将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥) 
[我说完了] 


B:(用自己的私钥将ClientKeyExchange中的秘密消息解密出来,然后将秘密消息进行处理,生成加密密钥,加密初始化向量和hmac的密钥,这时双方已经安全的协商出一套加密办法了) 
注意,我也要开始用加密的办法给你发消息了! 
[我说完了] 


A: [我的秘密是...] 


B: [其它人不会听到的...] 


Wireshark演示SSL在HTTPS的工作过程

http://www.youtube.com/watch?v=iQsKdtjwtYI&feature=related


运用wireshark破解SSL:

http://www.youtube.com/watch?v=LPnF_PWf3OM&feature=related 

or: http://www.youtube.com/watch?v=vQtur8fqErI&feature=related

 

 

/*******

通过wireshark窃取facebook cookie(需要cookie注入工具):

 http://www.youtube.com/watch?v=7HMnMqzkXu4&feature=related

********/

你可能感兴趣的:(.NET)