简介
HTTPS网络分层
SSL是一个介于HTTP协议与TCP之间的一个可选层,HTTPS
协议通过SSL or TLS层
来进行服务请求与数据交互
网络异常,图片无法展示
|
通信端口
协议 |
端口 |
http |
默认80 |
https |
默认443 |
SSL是一个二进制协议,与HTTP完全不同,其流量入口承载在默认的443端口,如果SSL和HTTP流量都从端口80进入,如果共用端口需要进行额外配置,基于TCP链接通过代理判断数据流报文头进行协议请求的转发与处理
网络异常,图片无法展示
|
通信方式
SSL/TLS协议区别
TLS
的主要目标是使SSL
更安全,并使协议的规范更精确和完善
- SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。 - TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。
TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。
SSL/TLS协议作用
- 认证用户和服务器,确保数据发送到正确的客户机和服务器
- 加密数据以防止数据中途被窃取
- 维护数据的完整性,确保数据在传输过程中不被改变
SSL握手
SSL协议分为两部分:Handshake Protocol、Record Protocol
。
协议 |
内容 |
Handshake Protocol |
用来协商通信密钥 |
Record Protocol |
定义数据传输的格式 |
Handshake Protocol(密钥协商)
网络异常,图片无法展示
|
客户端发出请求(ClientHello)
客户端主要向服务器提供以下信息:
- 支持的协议版本,比如TLS 1.0版
- 一个客户端生成的随机数,稍后用于生成"对话密钥"
- 支持的加密方法,比如RSA公钥加密
- 支持的压缩方法
服务器回应(ServerHello)
服务器的回应包含以下内容:
- 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
- 一个服务器生成的随机数,稍后用于生成"对话密钥"
- 确认使用的加密方法,比如RSA公钥加密
- 服务器证书
证书是需要申请,并由专门的数字证书认证机构(CA) 通过非常严格的审核之后颁发的电子证书。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被串改。另外,证书还有个有效期。
网络异常,图片无法展示
|
客户端回应(Certificate Verify)
客户端向服务器发送下面三项信息:
- 一个随机数。该随机数用服务器公钥加密,防止被窃听
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
- 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验
服务器最后回应(Server Finish)
- 交换协议版本号
- 选择一个两端都了解的密码
- 对两端的身份进行认证
- 生成临时的会话秘钥,以便加密信道
简易通俗版本SSL握手交互过程
网络异常,图片无法展示
|
Record Protocol(格式定义)
SSL安全性
网络异常,图片无法展示
|
通过分析SSL建立握手的过程,SSL的结构是严谨的,正确使用加密算法以及证书核验是不会出现安全问题的,如果没有合理使用SSL协议的话,则会有可能出现问题,常见的攻击就是 中间人攻击(middle in the middle) ,它是指在A和B通信的同时,有第三方C处于信道的中间,可以完全听到A与B通信的消息,并可拦截,替换和添加这些消息。
出现SSL安全隐患的原因如下:
- 不进行证书核身。SSL可以允许多种密钥交换算法,而有些算法,如DH,没有证书的概念,这样A便无法验证B的公钥和身份的真实性,从而C可以轻易的冒充,用自己的密钥与双方通信,从而窃听到别人谈话的内容
而为了防止middle in the middle攻击,应该采用有证书的密钥交换算法。 - 忽略安全提醒。有了证书以后,如果C用自己的证书替换掉原有的证书之后,A的浏览器会弹出一个警告框进行警告,但又有多少人会注意这个警告呢
- 加密强度弱。由于美国密码出口的限制,IE,netscape等浏览器所支持的加密强度是很弱的,如果只采用浏览器自带的加密功能的话,理论上存在被破解可能
- 代理。像路由器、连接热点等都需要类似证书核验的支持,否则也会成为中间攻击的场所
参考
《HTTP权威指南》
SSL/TLS协商过程详解
实现http和https共用一个端口原理及实现
网络异常,图片无法展示
|