开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第25天,点击查看活动详情
Web安全需求
web安全威胁
| 威胁 | 后果 | 对策 | |
|---|---|---|---|
| 完整性 | 用户数据修改 木马浏览器 更改存储 更改传输中的消息流量 | 丢失数据 设备受损 使其他一些威胁更加脆弱 | 密码校验和 |
| 机密性 | 网上窃听 从服务器上盗窃信息 网络配置信息 哪个客户与服务器通话的信息 | 信息丢失 秘密丢失 | 加密、WEB委托代理 |
| 拒绝服务 | 卡断用户线路 假的请求挤占机器 用垃圾填满驱动或存储 用DNS攻击孤立机器 | 断网 网络堵塞 阻止用户完成任务 | 难以防止 |
| 认证 | 假冒合法用户 伪造数据 | 假冒用户 使假信息得以确认 | 密码技术 |
SSL/TLS
SSL提供的安全服务
- 用户和服务器的合法性认证 using X.509v3 digital certificates
- 传输数据的机密性 using one of DES, Triple DES, IDEA, RC2, RC4, …
- 传输数据的完整性 using MAC with MD5 or SHA-1
SSL/TLS概况
-
协议分为两层
上层协议是用于管理SSL密钥信息的交换,下层提供基本的安全服务
-
TLS握手协议
-
客户和服务器之间相互认证
-
协商加密算法和密钥
-
它提供连接安全性,有三个特点
- 身份认证,至少对一方实现认证,也可以是双向认证
- 协商得到的共享密钥是安全的,中间人不能够知道
- 协商过程是可靠的
-
TLS记录协议
-
建立在可靠的传输协议(如TCP)之上,它提供连接安全性,有两个特点
- 保密性,使用了对称加密算法
- 完整性,使用HMAC算法
-
用来封装高层的协议
-
-
SSL连接(connection) 一个连接是一个提供一种合适类型服务的传输(OSI分层的定义)。 SSL的连接是点对点的关系。 连接是暂时的,每一个连接和一个会话关联。
-
SSL会话(session) 一个SSL会话是在客户与服务器之间的一个关联。会话由Handshake Protocol创建。会话定义了一组可供多个连接共享的密码安全参数。 会话用以避免为每一个连接提供新的安全参数所需昂贵的协商代价
TLS握手协议(Handshake protocol)
主要用来让客户端及服务器确认彼此的身份。
为了保护SSL记录封包中传送的数据,Handshake协议还能协助双方选择连接时所会使用的加密算法、MAC算法、及用于保护SSL记录中所发数据的加密密钥。
在传送应用程序的数据前,必须使用Handshake 协议来完成上述事项。
位于TLS记录协议之上 也用到了TLS记录协议的处理过程 ContentType = 22 协议格式
用途: 当TLS客户和服务器开始通讯的时候,它们要通过协商,在以下信息方面获得一致: 协议版本、密码算法、是否认证对方、 用什么技术来产生共享秘密数据,等等
第一阶段:建立起安全能力属性
- 客户发送一个client_hello消息,包括以下参数:1.版本、 2.随机数(32位时间戳+28字节随机序列)、 3.会话ID、 4.客户支持的密码构件(CipherSuite)、 5.客户支持的压缩方法列表
- 然后,客户等待服务器的server_hello消息
- 服务器发送server_hello消息,参数: 1.客户机和服务器支持的最高SSL版本中的较低版本、 2.服务器产生的随机数、 3.会话ID、 4.服务器从客户建议的密码算法中挑出一套、 5.服务器从客户建议的压缩方法中挑出一个
第二阶段:服务器认证和密钥交换
- 服务器发送自己的证书,消息包含一个X.509证书,或者一条证书链 除了匿名DH之外的密钥交换方法都需要
- 服务器发送server_key_exchange消息 可选的,有些情况下可以不需要。只有当服务器没有向客户发送证书时,才发送此消息 向客户发送公钥(因为没有数字证书)
- 服务器发送certificate_request消息 可选的,如果server不是使用的匿名DH算法,可以向客户请求一个证书 包含证书类型和服务器认可的认证机构列表
- 服务器发送server_hello_done, 然后等待应答
第三阶段:客户认证和密钥交换
- 客户收到server_done消息后,它根据需要检查服务器提供的证书,并判断server_hello的参数是否可以接受,如果都没有问题的话,发送一个或多个消息给服务器
- 可选的,如果服务器请求证书的话,则客户首先发送一个certificate消息,若客户没有证书,则发送一个no_certificate警告
- 然后,客户机密钥交换,使客户机可以从相反的方向发送信息给服务器,客户机生成48位的premaster secret,用服务器公钥加密,发送给服务器
- 最后,客户发送一个certificate_verify消息,其中包含一个签名,对从第一条消息以来的所有握手消息的HMAC值。
第四阶段:结束
- 第四阶段建立起一个安全的连接
- 客户发送一个change_cipher_spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中
- 然后,客户用新的算法、密钥参数发送一个finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对所有以来的消息进行校验。
- 服务器同样发送change_cipher_spec消息和finished消息。
- 握手过程完成,客户和服务器可以交换应用层数据。