ssl 和 https

HTTP 是基于TCP的超文本协议,web 的本质就是 http client 访问 http web 服务器。

HTTPS 即所谓的“HTTP over SSL”,实际上是将原有的 HTTP 数据 用SSL协议栈封装,SSL提供加密处理和证书机制,满足信息安全的目的。

加密也可直接用公约的加解密,但考虑到性能,采用的是公约机制交换共享密钥,后续双方用共享密钥对称加解密。

证书可以证明对方是可信的。服务器证书证明服务器可信,客户端证书则可完成个人身份认证。

层次大概是这样的:

https

注意,协议封装是个很重要的概念。和所有的封装一样,复杂度提高后,增加灵活性,扩展应用以满足特定需求,比低层的更容易理解等等。

https 的应用安全算法的关键点是:

  • 服务器证书可信
  • 客户端拿到服务器证书后,可在正规 CA 验证服务器
  • 客户端用证书公钥,与服务器交换共享密钥
  • cs 用共享密钥加密原 http 内容进行通信

HTTP 的 SSL 建立流程:

2018-01-08-07-59-02

流程说明:

  • 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 要高一些。

2018-01-08-10-41-12

  • SSL 客户端认证

就是基于证书的客户端认证。

  • 基于表单的认证

通过 web 的服务应用,将客户端 id+passwd 与之前的登录信息做匹配来进行,用的比较多。

  • Session 管理和 Cookies 应用

2018-01-18-18-52-07