阅读 1250

HTTPS及加密算法,看这一篇就够了

PS:原文首发于微信公众号:躬行之(jzman-blog)

最近交流群里有人问 HTTPS 相关的知识,虽然会用,但是却一知半解,今天专门来总结一些 HTTPS 相关的知识点,这一篇主要是相关理论知识,下一篇写个案例实践一下,主要内容如下:

  1. HTTP的缺点
  2. 什么是HTTPS
  3. 公开密钥加密技术
  4. HTTPS加密传输
  5. 公开密钥证书
  6. SSL和TLS
  7. 为什么不使用HTTPS

HTTP的缺点

HTTP 的缺点如下:

  1. 通信使用明文,传输内容可能被窃听
  2. 不验证后通信方的身份,容易伪装进行请求
  3. 无法保证报文的完整性,可能遭遇篡改

什么是HTTPS

简单来说,HTTPS(HTTP Secure) 就是在 HTTP 协议基础之上加入加密以及认证机制的 HTTP。

HTTPS 相较 HTTP 不是一种新协议,只是在 HTTP 通信接口部分使用了 SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议来实现。使得 HTTP 先与 SSL 通信,再由 SSL 和 TCP 通信,而不是 HTTP 直接与 TCP 通信,HTTP 和 HTTPS 图示如下:

HTTP  和 HTTPS
HTTP 和 HTTPS

公开密钥加密技术

对称密钥加密和非对称密钥加密加密算法中加密算法时公开的,而密钥时保密的,加密和解密都需要密钥,没有密钥就不能解密,反之,如果密钥被截获,则加密的内容就有可能被破解。

  • 对称密钥加密

这种加密方式又被称为共享密钥加密(Common key crypto system),这种方式就是加密和解密使用相同的密钥,在通信时还需将传输密钥给对方用来解密,密钥传输过程中同样可能被截获,所以这种加密方式通信安全的前提是如何安全的传输密钥,图示如下:

对称密钥加密
对称密钥加密
  • 非对称密钥加密

这种方式又被称之为公开密钥加密,使用一对非对称的密钥,一把叫做公开密钥(public key),一把叫做私有密钥(private key),其中公开密钥可以随意发送,私有密钥必须保密。

发送密文的一方要使用对方的公开密钥进行加密,对方收到信息之后,使用自己的私有密钥进行解密,这种方式不需要传输用来解密的私钥了,也就不必担心私钥被截获,图示如下:

非对称密钥加密
非对称密钥加密

HTTPS加密传输

由于原来的 HTTP 直接与 TCP 通信,由于 TCP/IP 协议族的工作机制,使得通信内容在传输链路上都有可能被窃听,顾名思义,互联网是由能连接到全世界的网络组成,通信线路上的通信设备不全是私有的,这也使得通信不安全,由此 HTTPS 诞生,那么 HTTPS 是如何加密的呢?

Https采用混合加密机制,如果密钥能够保证安全交换,那么全程有可能仅使用对称密钥加密来进行通信,如果不能保证密钥安全交换,可在密钥交换环节使用非对称加密方式,之后使用对称加密方式。这样做的目的是因为对称密钥加密相较非对称秘钥加密处理速度更快。

但是加密了就安全了吗,就不会被窃听了吗?实际上,即使通信被加密,通信内容还是可以被技术手段窃听到,但是通信加密后就不容易看懂具体的报文信息了,相当于达到了加密的目的。

HTTPS 加密传输过程中需要传输公开密钥,那么公开密钥又是如何保证其正确性呢,当然是数字认证机构颁发的公开密钥证书。

公开密钥证书

这里要提到数字认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书,数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上,其具体的业务流程如下:

  1. 服务器运营人员向数字证书认证机构提出公开秘钥的申请;
  2. 数字证书认证机构判明身份之后,会对已申请的公开密钥做数字签名,并将该公开密钥放入公钥证书后绑定在一起,服务器会将这份由数字认证机构颁发的公钥证书发送给客户端;
  3. 客户端获取到数字认证机构颁发的公开密钥后,对其进行数字签名验证,一是确认公开密钥是真实的数字认证机构颁发的,二是确认公开密钥的值得信赖的;
  4. 确认无误后,使用该公开密钥加密报文;
  5. 服务器使用私有密钥进行报文解密。

具体业务流程如下图所示:

公开密钥流程
公开密钥流程

第三步中,为了保证数字认证机构的公开密钥安全传输到客户端,大多数浏览器开发商发布浏览器版本时都会将常用认证机构的公开密钥内置在浏览器中。

SSL和TLS

HTTPS 使用 SSL(Secure Socket Layer) 和 TLS(Transport Layer Security)这两个协议,SSL 技术最初是由浏览器开发商网景通信公司率先倡导的,开发 过 SSL3.0 之前的版本。目前主导权已转移到 IETF(Internet Engineering Task Force,Internet 工程任务组)的手中。

IETF 以 SSL3.0 为基准,后又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL 为原型开发的协议,有时会统一称该协议 为 SSL。当前主流的版本是 SSL3.0 和 TLS1.0。

SSL 和 TLS 实际上可以理解为 TLS 是 SSL 的升级版本,TLS 基于 SSL,至于两者的具体区别还是留给专业人士,这里顺便普及一下 SSL 和 TLS 的相关背景。

为什么不使用HTTPS

HTTPS 由于使用了 SSL(包括 TLS) 而变得安全可靠,但是 SSL 由于要进行加密处理会导致整个通信变慢,频繁的加密、解密会消耗服务端和客户端的硬件资源。

SSL 不仅会导致通信慢,还会由于大量消耗 CPU 和内存等资源,导致整个处理速度变慢,和 HTTP 相比,网络负载可能可能会变慢 2 到 100 倍,如下图所示:

为什么不使用HTTPS
为什么不使用HTTPS

如果使用了 HTTPS,那就意味着要增加硬件成本,此外从数字认证机构购买证书也是需要开销的。

以上就是导致 HTTPS 虽然安全可靠,但是大多数网站还是使用 HTTP 的原因。