• HTTPS 协议基本概念

    背景

    HTTP 与 HTTPS 的区别

    我想我们首先得知道HTTPS的存在意义,即为什么有了HTTP还要有HTTPS? 最大的原因就是HTTP不安全。 HTTP通信,所有信息明文传播,带来了三大风险。
    (1) 窃听风险(eavesdropping):第三方可以获知通信内容。
    (2) 篡改风险(tampering):第三方可以修改通信内容。
    (3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

    HTTPS是通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议) 的组合使用,加密 HTTP 的通信内容。在整个通信线路中加密。(TLS是SSL的升级版)

    重点就在于两个词 加密认证 ,HTTP协议存在的最大的两个安全隐患就是明文传递以及没有身份验证,而HTTPS则解决了这两个安全隐患。
    SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
    (1) 所有信息都是加密传播,第三方无法窃听。
    (2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
    (3) 配备身份证书,防止身份被冒充。那么HTTPS又是怎样保证安全性的呢?

    两者的结构可以用下图来表示(图片摘自网上):

    yy

    SSL 、TLS 介绍

    1. SSL与TLS的发展历史

    上面我们说到了这个神奇而强大的SSL、TLS,现在来真正的认识一下它。

    1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。

    1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。

    1996年,SSL 3.0版问世,得到大规模应用。

    1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

    2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版

    目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。

    TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

    2. SSL与TLS的原理和基本过程

    SSL/TLS协议的基本思路是采用公钥加密法(非对称加密算法),也就是说,通信双方都必须有两个密钥,一个公钥,一个私钥.解密的一方首先生成一对密钥,一个私钥一个公钥,私钥不会泄漏出去,而公钥则是可以任意的对外发布的。用公钥进行加密的数据,只能用私钥才能解密。加密方首先从解密方获取公钥,然后利用这个公钥进行加密,把数据发送给解密方。解密方利用私钥进行解密。如果解密的数据在传输的过程中被第三方截获,也不用担心,因为第三方没有私钥,没有办法进行解密。可以简单的表示为下图(摘自网上):

    yy

    但是,这里还是会存在两个问题:

    问题1. 如何保证公钥不被中间人劫持篡改?

    这样似乎还不够,如果通信过程中,在三次握手或者客户端发起HTTP请求过程中,客户端的请求被中间人劫持,那么中间人就可以伪装成“假冒客户端”和服务器通信;中间人又可以伪装成“假冒服务器”和客户端通信。接下来,我们详细阐述中间人获取对称密钥的过程:

    中间人在收到服务器发送给客户端的公钥(这里是“正确的公钥”)后,并没有发给客户端,而是中间人将自己的公钥(这里中间人也会有一对公钥和私钥,这里称呼为“伪造公钥”)发给客户端。之后,客户端把对称密钥用这个“伪造公钥”加密后,发送过程中经过了中间人,中间人就可以用自己的私钥解密数据并拿到对称密钥,此时中间人再把对称密钥用“正确的公钥”加密发回给服务器。此时,客户端、中间人、服务器都拥有了一样的对称密钥,后续客户端和服务器的所有加密数据,中间人都可以通过对称密钥解密出来。

    为了解决此问题,我们引入了数字证书的概念。服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就不是简单的把公钥给客户端,而是给客户端一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书一定是服务器给客户端的。中间人发送的伪造证书,不能够获得CA的认证。

    问题2. 公钥加密计算量太大,如何减少耗用的时间?

    每一次对话(session),客户端和服务器端都生成一个”对话密钥”(session key),用它来加密信息。由于”对话密钥”是对称加密,所以运算速度非常快,而服务器公钥只用于加密”对话密钥”本身,这样就减少了加密运算的消耗时间。

    综上所述,SSL、TSL通信主要分为以下3个步骤

    1. 客户端向服务端发起链接得到公钥并且验证公钥。 (如图1中的前两个剪头表示)
    2. 双方协商生成“对话秘钥” (如上图1中的第3个剪头)
    3. 双方采用对话秘钥进行加密通信 (如上图中的第四个剪头)

    接下来,我们就围绕这三个步骤展开学习讨论:

    首先,我们将前两个阶段称为握手阶段。过程可用下图表示(图片摘自网上):

    yy

    “握手阶段”涉及四次通信,我们一个个来看。

    • A阶段(客户端发出请求,Client Hello):

    在这一步,客户端主要向服务器提供以下信息。

    (1) 支持的协议版本,比如TLS 1.0版。

    (2) 一个客户端生成的随机数,稍后用于生成”对话密钥”。

    (3) 支持的加密方法,比如RSA公钥加密。

    (4) 支持的压缩方法。

    • B阶段(服务器回应 Server Hello):

    服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。服务器的回应包含以下内容。

    (1) 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

    (2) 一个服务器生成的随机数,稍后用于生成”对话密钥”。

    (3) 确认使用的加密方法,比如RSA公钥加密。

    (4) 服务器证书。

    • C阶段(客户端回应):

    客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向用户显示一个警告,由其选择是否还要继续通信。
    如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

    (1) 一个随机数。该随机数用服务器公钥加密,防止被窃听。
    (2) 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    (3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

    • D阶段(服务器的最后回应):

    服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的”会话密钥”。然后,向客户端最后发送下面信息。

    (1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

    (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

    至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用”会话密钥”加密内容。

    SSL 证书概念

    SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。他的主要功能就是标识服务器的身份。

    从技术上说,SSL 证书(也称为数字证书)将身份与一对可用于加密和签名数字信息的电子密钥绑定。SSL 证书能够实现对某人自称有权使用特定密钥的声明的验证,有助于防止有人使用欺骗性密钥来模拟其他用户。当与加密配合使用时,SSL 证书可提供完整的安全解决方案,可以保证参与事务的一方或各方的身份。

    SSL 证书是由受信任的第三方(称为证书颁发机构 (CA))发放的。CA 的作用有些像护照办理处。CA 必须采取一些措施来确定要向其发放 ID 的人或组织的身份。一旦 CA 建立某个组织的身份后,就可以发出一个包含该组织的公钥的证书,并用 CA 的私钥对其签名。

    通过使用 SSL 证书,您就能在自己的站点上开展验证身份的、加密的在线商务活动。访问您站点的用户将可以向站点提交信用卡号或其他个人信息,从而保证他们真心实意与您进行业务交易(并非是骗子),并且他们发送给您的信息不会被目标接收者以外的任何人截取或解密。您的 SSL 证书将包含下列信息:

    您的组织的公用名称(如 www.bea.com)
    1)其它标识性信息(如 IP 和物理地址)
    2)您的公钥
    3)公钥的到期日期
    4)发出此 ID 的 CA 的名称(如 VeriSign)
    5)一个唯一的序列号
    6)VeriSign 的数字签名

    主要的证书类型有:PEM、DER、PKCS#12
    PEM可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输。

    辨别编码规则 (DER) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。

    PKCS#12
    公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件。

     

     

    参考:

    http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html