Chinaunix首页 | 论坛 | 博客
  • 博客访问: 598358
  • 博文数量: 109
  • 博客积分: 1463
  • 博客等级: 上尉
  • 技术积分: 859
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-22 13:21
个人简介

希望和广大热爱技术的童鞋一起交流,成长。

文章分类

全部博文(109)

文章存档

2017年(1)

2016年(2)

2015年(18)

2014年(1)

2013年(9)

2012年(15)

2011年(63)

分类: 网络与安全

2015-06-04 14:51:41

原文:


普通的通信无法保证数据的安全,它随时可能被第三方截获而泄漏通信双方之间的隐私,这显然是我们不希望看到的,尤其在跟用户名、、个人信息息息相关的通信过程(如网上银行交易、机密文件传输等等)尤其看重数据交互的隐秘性,所以我们常常用协议来建立安全保密的通信,SSL协议能够保证交互双方的数据按密文方式传输,第三方在没有私钥的情况下几乎无法破解,从而到达保密的目的。究竟SSL是如何交互数据来确保安全的,很多人却不得而知,为了解答大家的疑惑,这里详细介绍一下SSL的交互过程。    

1、建立TCP连接

由于SSL协议依赖于TCP连接实施,所以在SSL交互之前需要先建立TCP连接。connect,服务端acccept客户端,经历三次握手以后TCP连接建立。

2、客户端发送SSL请求

客户端(Client)向服务端(Server)发送自身使用的SSL(SSL一共有三个版本)、的相关配置、随机数据以及其在在SSL协议中需要用到的信息。

3、服务端处理SSL请求

服务器(Server)反馈给客户端(Client)自己的SSL版本、加密算法的相关配置、随机数据以及用自己的私有加密的SERVER-HELLO信息。服务端(Server)紧接着将自己的证书(包含公共密钥)传递过去。同时有个可选项目,即服务端(Server)可以要求客服端(Client)发送自己的证书。
4、客户端验证服务端身份

客服端(Client)用服务端(Server)传递过来证书验证服务端(Server)的身份,如果身份未验证通过则结束本次通信。证书验证通过后利用 服务端(Server)的公共密钥尝试解开被其用私有密钥加密过的SERVER-HELLO信息,如果解开失败,说明该SERVER-HELLO必然是假 的,故结束本次通信。

5、客户端发送公共密钥加密过的随机数据

客户端端(Client)生成随机数据(sharedsecret),并且把这个随机数据用服务端(Server)发送过来的的公共密钥加密,此次加密过 程产生本次握手中的premastersecret(这个步骤是有可能有服务端的参与的,具体情况由他们使用的加密算法决定),然后将它 (premastersecret)送回给服务端(Server)。如果服务端(Server)要求需要验证客户端(Client),那么客服端 (Client)也需要自己把自己的证书(包含公共密钥)传递过去,同时送一些自己签过名(私有密钥加密)的数据过去。

6、服务端用私有密钥解密加密后的随机数据并协商暗号

Server验证完client的身份之后,然后用自己的私有密钥解密得到premastersecret然后双方利用这个 premastersecret来共同协商,得到mastersecret(可理解为premastersecret为双方协商的暗号,然后使用这个暗号 再协商一个mastersecret用来产生真正的会话密钥用来传输数据)以此来保证数据的决对安全。

7、服务端跟客户端利用暗号生成加密算法跟密钥key

双方用mastersecret一起产生真正的sessionkey,这将是一个对称加密的key。这个key还可以用来验证数据完整性。双方再交换结束信息。握手结束。

接下来双方就可以用协商好的算法和密钥key,采用对称加密算法来通信了。

阅读(1101) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~