HTTPS 101

HTTPS通信

什么是HTTPS

HTTPS即 Hypertext Transport Protocol Sercure,超文本传输协议安全版。

HTTP vs. HTTPS

  • 应用层协议:HTTP,HTTPS = HTTP + TSL/SSL(都是应用层协议)
  • 内容是否加密:HTTP传输内容是明文,HTTPS是密文
  • 都是基于客户端-服务器模型,因为二者都是HTTP协议的通信

TSL/SSL

TSL 即 Transport Secure Layer,传输安全层协议;SSL 即 Secure Sockets Layer,安全套接字协议。
最初网景公司为了解决隐私数据需要加密传输的问题,设计了 SSL,从而诞生了 HTTPS。最后一个版本是 3.0,记录在 RFC6101中。
之后 IEFT 对 SSL 3.0 升级,设计了 TSL 1.0,记录在 RFC 2246中。目前最新版是 1.2,记录在 RFC5246 中。
目前实际使用的大多数 HTTPS 都是 TSL 的,SSL 的存在是为了兼容某些老旧的系统。

TSL/SSL 都是基于非对称公钥加密体系的,该体系存在两个秘钥:

  • 仅服务端保存和使用的私钥
  • 服务端发送给所有请求者的公钥
  • 公钥加密的信息只能私钥解密,私钥加密的信息也是能公钥解密

公钥仅用于下面的通信过程的前几个步骤,一旦安全通信建立,将不再使用公钥加密。
在建立安全连接的过程中,客户端发用公钥加密的信息,服务端用私钥解密。

HTTPS 通信过程(工作原理)

通信过程需要加密,采用三种加密算法

  • 非对称加密算法,比如 RSA、DSA/DDS
  • 对称加密算法,比如 AES、RC4、3DES
  • Hash算法,比如 MD5、SHA1、SHA256

通信过程如下

HTTPS通信过程中,如果出现任何的异常,通信将被终止,以保护敏感信息不被泄露。
下面的通信过程被称为 SSL Handshack,目的是建立服务端与客户端的唯一(随机数)受信通信。

第 0 次通信

-1. 客户端访问HTTP资源
0. 服务端重定向到HTTPS资源

第 1 次通信

  1. 客户端发送HTTPS请求,将支持的加密算法和 Hash 散发发送给服务端
  2. 服务端收到客户端的HTTPS请求后
    1. 服务端根据客户端支持的算法(加密算法和 Hash 算法)与自己支持的算法比对,选择二者都适用的算法
    2. 生成并返回证书给客户端。
      证书包含:证书信息(证书颁发机构、服务端域名、有效期等)、公钥、Hash算法

第 2 次通信

  1. 客户端获得证书后
    1. 验证证书合法性:证书颁发机构是否合法、证书的服务器域名与客户端现在访问的是否一致、证书是否过期等
    2. 如果证书合法或用户接受了不受信的证书,浏览器生成一段随机数,用(服务端返回的)公钥对其加密
    3. 生成一段握手消息,使用(服务端返回的)Hash 算法计算其 Hash,使用随机数对握手消息加密
    4. 发送如下信息:(a)发送使用公钥加密了的随机数、(b)使用随机数加密了的握手消息、(c)握手消息的 Hash
  2. 服务端收到信息后
    1. 使用私钥对(a)解密获得随机数,使用随机数对(b)解密获得握手消息,使用 Hash 算法对握手消息计算 Hash,验证是否与(c)一致
    2. 生成一段握手消息,使用 Hash 算法计算握手消息的 Hash,使用随机数对握手消息加密
    3. 发送(d)使用随机数加密了的握手消息和(e)计算出的 Hash

第 3 次通信

  1. 客户端收到信息后
    1. 使用随机数对(d)解密,获取服务端发送的握手消息,使用 Hash 算法计算握手消息 Hash,验证是否与(e)一致
    2. 如果一致,则正式进入真正传出内容的传输阶段;客户端使用随机数对真正传输的内容加密,然后发送。

看完通信过程,再看看三种加密算法是如何参与到通信过程的

  • 非对称加密算法,用于第 2 次通信过程的加解密
  • 对称加密算法,用于第 2 次和第 3 次通信过程中对握手消息的加解密
  • Hash 算法,用于第 2 次和第 3 次通信过程中对随机数的验证

三次通信过程中C/S间的对话

C:”我们开始通话吧!”
S:”好的,不过为了保证我们的通话不被窃听,我们对通话加密吧。这是我的身份信息,给你。”
C:”我来看看,恩,我能够相信你或者我选择相信你(客户端选择受信)。我用你发给我的加密方式,发送一段密文给你,你看对吗?”
S:”恩,对的。我要告诉你,你是对的”
C:”恩,好的,我知道啦。恩,加密是对的,我们开始通话吧”

证书

如果没有证书,攻击者可以拦截通信,在第 2 步,攻击者获取公钥并替换为自己的公钥,然后返回给客户端。
客户端使用攻击者的公钥加密信息,攻击者就可以获取用户加密所用的随机数。这样,攻击者就可以伪装成客户端。

证书要到证书机构认证才能获取或者自己制作(自己信任自己),这种人为的确认保证了加密的可靠——如果客户端对不被认证的证书不信任,那么攻击者就无法实现攻击。

证书按用途分类

  • SSL证书,用于 HTTPS 通信
  • 代码签名证书,用于软件签名(可扩展主题)
  • 客户端证书,用于加密邮件
  • 双因素证书,网银的USB Key使用的

获取证书

企业可以向某个认证机构 Cetificate Authority(CA)申请,个人用户处于开发目的也可以个人制作。

向 CA 申请

证书按认证级别分类

  • 域名证书(Domain Validate Certifcation),CA需要验证申请人是否对其提供的域名有完全的控制权
    • 除了单个域名与证书的绑定,还可以申请通配符域名认证(比如 *.baidu.com),不过收费更高
  • 组织证书(Organization Validate Certifaction),域名证书验证 + 组织背景验证
  • 扩展验证证书(Extend Validate Cterfication),最为安全,费用最高
    • 使用该证书的特点是,整个浏览器地址栏变绿同时会显示被认证的组织名称

HTTPS 101_第1张图片

个人制作

参考《HTTPS(2)-keytool》

证书的验证过程

证书按证书链的方式组织,最顶层是根 CA 机构,其下是根 CA 机构颁发的中级 CA 机构,最后就是中级 CA 机构颁发的特定公司或组织的 CA 证书。验证证书的过程就是依次验证整个证书链的每个证书是否受信,如果根 CA 机构不受信,那么其颁发的所有证书都不受信。证书受信的条件是整个证书链的证书都是受信的。

HTTPS 101_第2张图片

证书按认证有效期长分类

  • 根认证有效期最长
  • 中级其次
  • 组织公司认证有效期最短

HTTPS攻击

  • SSL劫持:发往客户端的证书被中间人拦截,中间人发送自己的证书给用户
  • SSL Strip:用户由HTTP到HTTPS的重定向被中间人拦截,中间人是用户继续与服务端通信,但是使用HTTP

HTTPS站点

https://www.baidu.com
https://en.wikipedia.org/wiki/Transport_Layer_Security
https://login.live.com/
https://kyfw.12306.cn/otn

你可能感兴趣的:(https)