码迷,mamicode.com
首页 > 其他好文 > 详细

SSL过程详解

时间:2014-10-11 21:49:07      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:ssl

1、SSL版本的问题
HTTPS加密传输的功劳归功于 TLS,平时称呼的 SSL 是 TLS 的前身,SSL 的最终版本是 3.0,而 TLS 的最新版本是1.3。
TLS 的加密功能依赖公私钥加解密系统.
2、SSL工作流程
第一、用户浏览器将以下信息发送到服务器。 
I.TLS版本号
II.随机数:一般是28字节的随机数,随机数将用于产生最后的对称密钥
III.session id:
  在这里它是空值或者是null。如果在几秒前该浏览器曾连接过Amazon.com,它就可能继续使用前面的会话,而不需要重新执行整个“握手”过程
IV.浏览器所支持的密码算法
V.HOST:
   SSL握手先于HTTP传输之前
第二、服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。
I.Unix时间戳以及28字节的随机数,随机数将用于产生最后的对称密钥
II. 一个32字节的会话标识.
  有了它,随后重连服务器就不需要再执行一个完整的握手过程了
III. 选择的加密算法
例如:TLSRSAWITHRC4128_MD5
表示使用“RSA” 公钥算法来验证证书以及交换密钥,用RC4加密算法对数据进行加密,使用MD5哈 希算法来校验消息内容
IV.证书
包含的内容有:组织的名称、地址、服务器DNS域名、签名算法、签名值、MD5值
第三、客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续
I.  日期检测
II. 签名颁发者可信度检测
III. 签名检测
IV. 站点身份检测
第四、客户端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器.
 生成pre-master secret比较复杂,以RSA举例来说明
 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。
首先选择两个很大的质数“p”和“q”,并对他们求积得到“n=p*q”。接下来,取一个较小的“e”作为指数,它用作“加密指数”,而对e的进行特殊的逆反函数计算所得到的“d”作为“解密指数”。然后将“n”和“e”公开出去,而对“d”要保密,对于“p”和“q”你可以把它们扔掉,也可以像“d”一样保密起来。真正重要的要记住“d”和“e”是相互的逆反。
现在,如果你有一些消息,那么你只需要将该消息的字节翻译成一个数“M”,若要对这个消息进行“加密”形成“密文”的话,你就这么计算:
C ≡ Me (mod n)
它意思是先求“M”的“e”次方,然后对它应用模数“n”求余。举个例子,11AM +3 hours ≡ 2 (PM)(mod 12 hours)。接收者知道(解密用的)“d”,而“d”可以对已加密的消息进行反转并还原消息:
Cd ≡ (Me)d ≡ Me*d ≡ M1 ≡ M (mod n)
另一件有意思的事情是拿着“d”的人可以对一个文档进行签名,其做法是文档“M”求“d”次幂然后应用模数“n”求余数“S”:
Md ≡ S (mod n)
知道其公开的加密指数“e”和模数“n”。现在我们要创建一个攻击者或偷听者不能辨别的随机密钥,这件事做起来不像听起来那么 简单。在1996年,研究者发现Netscape Navigator1.1仅使用三个数据源来作为他们的伪随机数生产器的种子(PRNG),他们是当前时间,进程号和父进程号,虽然这个48字节的“pre-master secret”随机数并不直接使用,但是保证其私密性是非常重要的。
第五、如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
第六、如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的pre-master secret,并用它通过某些算法生成本次会话的master secret。
mastersecret = PRF(premaster_secret, "master secret", ClientHello.random + ServerHello.random)
“premastersecret”是客户端之前发送的;“master secret”用的是一个字符串的ASCII值(例如:“6d 61 73 74 65 72 ...”)。然后我们将本文最开始看到的ClientHello和ServerHello发送的随机数拼接起来。
PRF是一个“伪随机数函数”,这个函数很聪明,在规约中也有定义。它使用基于哈希的消息验证码(HMAC)的MD5和SHA-1两种哈希函数将密钥,ASCII字符以及我们给的种子结合起来。对每个哈希函数发送一半的输入。说它聪明的原因是即使面对MD5和SHA-1的弱点,它的防攻击能力还很强。这个过程可以自我反馈并不停地循环,而且我们要多少字节就能生成多少。
依照这个过程,我们获得以下48字节的“master secret”
第七、客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
现在双方都有了“master secrets”,规约描述了我们如何生成会话所需的所有的密钥,我们需要使用PRF函数来创建一个“key block”,然后从这个块中提取所需的密钥:
第八、客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
第九、服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
第十、本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密
在SSL通讯中,首先采用非对称加密交换信息,使得服务器获得浏览器端提供的对称加密的密钥,然后利用该密钥进行通讯过程中信息的加密和解密。为了保证消息在传递过程中没有被篡改,可以加密HASH编码来确保信息的完整性。

SSL过程详解

标签:ssl

原文地址:http://blog.csdn.net/richard_rufeng/article/details/39996581

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!