Web Https和web认证
ssl 和 https
HTTP 是基于TCP
的超文本协议,web 的本质就是 http client 访问 http web 服务器。
HTTPS 即所谓的“HTTP over SSL”,实际上是将原有的 HTTP 数据 用SSL
协议栈封装,SSL
提供加密处理和证书机制,满足信息安全的目的。
加密也可直接用公约的加解密,但考虑到性能,采用的是公约机制交换共享密钥
,后续双方用共享密钥对称加解密。
证书可以证明对方是可信的。服务器证书证明服务器可信,客户端证书则可完成个人身份认证。
层次大概是这样的:
注意,协议封装
是个很重要的概念。和所有的封装
一样,复杂度提高后,增加灵活性,扩展应用以满足特定需求,比低层的更容易理解等等。
https 的应用安全算法的关键点是:
- 服务器证书可信
- 客户端拿到服务器证书后,可在正规 CA 验证服务器
- 客户端用证书公钥,与服务器交换共享密钥
- cs 用共享密钥加密原 http 内容进行通信
HTTP 的 SSL 建立流程:
流程说明:
- s1,s2 双方交换 ssl 版本,支持的密钥算法等信息
- s3,服务端发送公钥证书到客户端
- s5, 发送 pre-master secrey 的 rng 串,用公钥加密过
- s6,客户端告知服务器后续将使用 s5 中的密钥加解密;
- s7,客户端将之前的所有报文,做完整性校验,由服务器校验
- s8,s9,服务器完成客户端 s6,s7 类似的事情,校验,
- s9 客户端完成后,ssl 连接建立完成
web 客户端认证
上面的 https 主要讲的是服务器端的认证流程,客户端当然也可以用证书,前面提到的银行 u 盾就属于客户端证书,对于金融适用,但互联网确实麻烦了点。
- BASIC 认证
http/1.1 的认证方式,就是将 usr:id base64 编码后发送给服务器,太简单,不安全
- DIGEST 认证
有认证需求的客户端发起请求,服务器发送挑战码
,客户端用摘要算法计算回应码
,安全性比 BASIC 要高一些。
- SSL 客户端认证
就是基于证书
的客户端认证。
- 基于表单的认证
通过 web 的服务应用,将客户端 id+passwd 与之前的登录信息做匹配来进行,用的比较多。
- Session 管理和 Cookies 应用