SSL全称为“Secure Sockets Layer”(安全套接层),是一种用于网站安全连接的协议(或技术)。
所谓的安全连接有两个作用:
首先是SSL可以提供通信双方相互认证。显而易见,当你开始和对方交换信息前,确切了解对方身份是非常重要的。SSL通过数字证书技术实现,使得这一需求得以满足。
另一个是它能使数据以加密方式传输,使得非授权用户不可读。
一.
在介绍SSL其它知识之前,按照惯例,我们还是先来介绍几个专业名词:
1. 证书
数字证书是公钥数据的可信载体,包含了持有者的身份信息,并且由权威第三方CA中心签发和管理,也就是说证书的可信,是由于对权威第三方的信任所建立的
2. 证书链
顾 名思义,证书链就是一串证书,准确地说,证书链就是由CA颁发机构的根CA证书与二级CA证书这两张证书组成.拥有了CA证书链后,你的浏览器将自动信任 由同一家CA签发的所有证书。如果你选择了这个选项,系统会询问你是否要接受给你的浏览器的CA证书。通过选择接受证书,你的浏览器将直接收到证书。
3. CA
CA是证书颁发机构,是一个权威的第三方,作为信任关系的起点.其功能包括:接收并处理证书申请请求,生成证书,生成证书废止列表,发布证书到目录服务器.所有证书必须经由CA签名,证书才能生效,才是合法的证书.
二. 数字证书的验证过程
第一步,验证CA中心的签名,如果通过,即可知数字证书的内容是真实和完整的
第二步,验证证书时间有效性,每张证书都有有效期,如果通过,即可知数字证书还在有效使用期限内
第三步,验证证书状态有效性,被挂失或者作废的证书,都被CA中心发布到CRL黑名单中,要检查对方证书是否在CRL中,如通过,即可知数字证书的状态是正常的
三. SSL握手
client server
hello
----------------->
hello
<-----------------
----------------分-隔-线-------------------------------------------------
服务器证书
<-----------------
证书请求(双向认证)
<-----------------
-------------------------分-隔-线------------------------------------
客户端证书
------------------>
验证证书
------------------>
-----------------------------分-隔-线-------------------------------------
握 手 结 束
相关解释:
客户端向服务器发送client_hello报文,服务器向客户机回应server_hello报文,建立如下的安全属性:协议版本,会话ID,压缩方法,同时生成并交换用于防止重放***的随机数
如果服务端配置为单向认证,客户端则只需要验证服务器证书是否合法,不需要出示自己的证书;而如果服务端配置为双向认证,客户端验证完服务器证书后,会应服务端的要求出示自己的用户证书,服务端来验证客户端的合法性
握手结束,客户与服务器可以发送应用层数据了
三. 数据传输过程
1. 发送方
1) |--------------| 用 会话密钥 加密
| 明文 | ---------------------------> 密文
|--------------|
2) |--------------用 hash算法 发送方 的私钥
| 明文 | ---------> 摘要 -----------> 签名后 的原文摘要
|--------------|
3) |------------------| 用 接收方的 公钥 加密
| 会话密钥 | --------------------> 加密后 的 会话密钥
|-------------------|
发送方将这三样东西传给接收方,接收方拿到这三样东西之后;
2. 接收方
1) 用 接收方 的 私钥 解密
加密后 的 会话密钥 --------------------------------> 会话密钥
2) 用 会话密钥 解密
签名后 的 原文摘要 -------------------------------> 摘要
3) 用 会话密钥 解密 用 hash算法
密文 --------------------> 明文 --------------------> 摘要
然后,拿2),3)的两个摘要对比,一致则表示数据完整,反之,数据有可能被篡改.
转载于:https://blog.51cto.com/juven/831793