今天早上把之前了解到的一些常见加密方法给简单总结了一下,今天晚上抽一点时间再来总结一些常见的身份、数据安全协议总结吧。
- HTTPS协议
- OAuth2 协议
- SSH 协议
1.HTTPS协议
简单理解,HTTPS协议就是由HTTP over SSL
,即HTTP协议的上层还有一个SSL(Security Socket Layer)协议层,最后两者组合形成HTTPS层。
** 注:TLS是SSL在3.0版本之后的名字,TLS针对SSL的许多缺点进行了改进**
SSL/TLS实现的基本过程:
- 客户端向服务器索要并验证公钥。
- 双方协商生成"对话密钥"。
- 双方采用"对话密钥"进行加密通信。
其中1,2过程称之为握手阶段
,3过程称之为正式加密通信阶段
首先来了解一下握手阶段在客户端和服务器之间到底发生了哪些事情:
客户端发起加密通信的请求,这被叫做ClientHello请求。客户端提供以下信息:
支持的协议版本,比如TLS 1.0版。
一个客户端生成的随机数,稍后用于生成"对话密钥"。
支持的加密方法,比如RSA公钥加密。
支持的压缩方法。
服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容:
确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
一个服务器生成的随机数,稍后用于生成"对话密钥"。
确认使用的加密方法,比如RSA公钥加密。
服务器证书。
客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息:
一个随机数。该随机数用服务器公钥加密,防止被窃听。
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。
服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息:
编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。
2. OAuth2协议
什么是OAuth2协议?
An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.
一句话,OAuth2协议是一个安全验证协议,不仅应用在Web端,也可以在移动端、桌面应用等。
OAuth2模型:了解在OAuth2中涉及到的几个角色:
- Third-party application:第三方应用程序,又称"客户端"(client)。
- HTTP service:HTTP服务提供商。
- Resource Owner:资源所有者,又称"用户"(user)。
- User Agent:用户代理,常指浏览器
- Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。
- Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。
OAuth2实现的一个大致过程如下图:
上边这幅图总结一下其实就四个步骤:
- 获取用户授权(比如通过Web UI)
- 向服务器提交用户授权
- 获取授权许可之后的令牌(token)
- 利用令牌来访问受保护的资源
OAuth2实现的具体过程:
上边这幅图其实是对上边第2、3步的一个细化。首先客户(即User-Agent)与服务器交互,确定向该第三方系统(即图中的Client)授权,然后服务器会返回一个Authorization Code
授权码,然后第三方系统(即图中的Client)再利用这个授权码
去获取到一个Access Token
访问令牌。最后第三方系统拿着这个令牌去访问系统上的一些资源。
另外,在这个过程中还有一个比较有意思的点:为什么先需要一个Authorization Code
再去获取一个Access Token
,为什么不直接获取到一个Access Token
,这样多省事高效。其实这与客户端(即User-Agent的安全性有关),具体是怎么回事,点击这里查看
3. SSH协议
SSH(Secure Shell)是一个提供数据通信安全、远程登录、远程指令执行等功能的安全网络协议,由芬兰赫尔辛基大学研究员Tatu Ylönen,于1995年提出,其目的是用于替代非安全的Telnet、rsh、rexec等远程Shell协议。之后SSH发展了两个大版本SSH-1和SSH-2。
SSH的主要特性:
- 加密:避免数据内容泄漏
通信的完整性:避免数据被篡改,以及发送或接受地址伪装
(检查数据是否被篡改,数据是否来自发送者而非攻击者) SSH-2通过MD5和SHA-1实现该功能,SSH-1使用CRC-32 - 认证:识别数据发送者和接收者身份 客户端验证SSH服务端的身份:防止攻击者仿冒SSH服务端身份,避免中介人攻击和重定向请求的攻击;OpenSSH通过在know-hosts中存储主机名和host key对服务端身份进行认证 服务端验证请求者身份:提供安全性较弱的用户密码方式,和安全性更强的per-user public-key signatures;此外SSH还支持与第三方安全服务系统的集成,如Kerberos等
- 授权:用户访问控制
- Forwarding or tunneling to encrypt other TCP/IP-based sessions 可以通过SSH为Telnet、FTP等提供通信安全保障,支持三种类型的Forwarding操作:Port Forwarding;X Forwarding;Agent Forwarding