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),这种方式就是加密和解密使用相同的密钥,在通讯时还需将传输密钥给对方用来解密,密钥传输过程当中一样可能被截获,因此这种加密方式通讯安全的前提是如何安全的传输密钥,图示以下:app

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

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

发送密文的一方要使用对方的公开密钥进行加密,对方收到信息以后,使用本身的私有密钥进行解密,这种方式不须要传输用来解密的私钥了,也就没必要担忧私钥被截获,图示以下:加密

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

HTTPS加密传输

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

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 的缘由。

相关文章
相关标签/搜索