1. http:超文本传输协议
2. https:由http和SSL协议构建的可进行加密传输和身份认证的网络协议,比http安全性更高
具体区别,参考:HTTPS协议详解(一):HTTPS基础知识
3. SSL
百度百科:
**SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)**是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
SSL实际上,是为所有基于TCP协议的网络应用提供应用编程接口(API),作为介于HTTP和TCP之间的一个可选层,绝大多数应用层协议都可以直接建立在SSL之上。SSL不是一个单独的协议,而是两层协议。
(1) 简化的SSL:一个简单的安全信道
- 握手:A和B利用他们的证书、私钥认证(鉴别)彼此,以及交换共享密钥
- 密钥派生:A和B利用共享密钥派生出一组密钥(即公钥和私钥)
- 数据传输:待传输数据分割成一系列记录
- 连接关闭:通过发送特殊信息,关闭安全连接
SSL是架构在TCP之上的,在SSL进行信息传输之前,TCP连接已经建立,同样地,在SSL安全连接断连之后,才是TCP开始断开连接
a. 简单握手过程:
b. 密钥派生
报文认证码(MAC)密钥和数据加密密钥
- 四个密钥
- Kc:用于加密客户向服务器发送数据的密钥
- Mc:用于客户向服务器发送数据的MAC密钥
- Ks:用于加密服务器向客户发送数据的密钥
- Ms:用于服务器向客户发送数据的MAC密钥
密钥派生过程:
- 客户一次随机数、服务器一次随机数和预主密钥输入伪随机数发生器,产生主密钥MS
- 主密钥和新一次随机数输入另一个随机数发生器:“密钥块”
- 密钥块“切片”:
- 客户MAC密钥
- 服务器MAC密钥
- 客户加密密钥
- 服务器加密密钥
- 客户初始向量(IV)
- 服务器初始向量(IV)
密钥派生过程,对于客户端和服务端是一样的,使用的输入、派生函数等都是一样的,确保客户端和服务端派生的私有密钥是相同的
- 通过密钥派生函数(KDF)实现密钥派生
- 提取主密钥和(可能的)一些额外的随机数,生成密钥
c. 数据记录
-
为什么不直接加密发送给TCP的字节流
- MAC放到哪? 如果放到最后,则只有全部数据接收全才能进行完整性认证
-
方案:将字节流分割为一系列记录
- 每个记录携带一个MAC
- 接收方可以对每个记录进行完整性检验
-
问题:对于每个记录,接收方需要从数据中识别出MAC
- 采用变长记录
完整的SSL工作过程,参考:SSL的体系结构
(2)详细的握手过程
- 客户发送其支持的算法列表,以及客户一次随机数(nonce)
- 服务器从算法列表中选择算法,并发回给客户:选择+证书+服务器一次随机数
- 客户验证证书,提取服务器公钥,生成预主密钥,并利用服务器的公钥加密预主密钥,发送给服务器
- 客户与服务器基于与预主密钥和一次随机数分别独立计算加密密钥和MAC密钥
- 客户发送一个针对所有握手消息的MAC
- 服务器发送一个针对所有握手消息的MAC
最后两步是为了保护握手过程免遭篡改
4. https协议的工作原理
- 客户使用https url访问服务器,要求web服务器建立ssl链接
- web服务器接收到客户端请求后,会将网站的证书(证书中包含公钥)传输给客户端
- 客户端和web服务器端开始协商SSL链接的安全等级,也就是加密等级
- 客户端通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传输给服务器端
- web服务器通过自己的私钥解密出会话密钥
- web服务器通过会话密钥加密与客户端之间的通信
补充:
协商是必要的
- 允许客户与服务器支持不同加密算法
- 客户和服务器在数据传输之前商定密码组
- 客户提供选项(choice)
- 服务器挑选其一
密码组
SSL在安全通信过程中涉及到很多密码,也涉及到多个加密算法,例如:
- 公开密钥算法(public-key algorithm)
- 对称加密算法(symmetric encryption algorithm)
- MAC算法
加密算法以及相关的密钥称为密码组,即密码套件
SSL更改密码规格协议
- 更新当前连接的密码组,标志着加密策略的改变
- ContentType = 20
- 只包含一条消息,一个值为1的字节
SSL警告协议
- 当握手过程或数据加密过程出错或者发生异常时,为对等实体传递SSL警告或终止当前连接
- ContentType = 21
- 协议包含两个字节:警告级别和警告代码
SSL握手协议
- 协商结果是SSL记录协议的基础
- SSL v.3的握手过程用到三个协议:握手协议、更改密码规格协议和警告协议
- ContentType = 22
SSL记录协议
- 描述SSL信息交换过程中的记录格式
- 所有数据(包含SSL握手信息)都被封装在记录中
- 一个记录由两部分组成:记录头和数据