看完这篇还搞不懂HTTPS,就来找我!
作为一个有追求的程序员 , 了解行业发展趋势和扩充自己的计算机知识储备都是很有必要的 , 特别是一些计算机基础方面的内容 , 就比如本篇文章要讲的计算机网络方面的知识 。 本文将为大家详细梳理一下HTTPS的实现原理 。

文章图片
图片来自Pexels
近年来 , 随着用户和互联网企业安全意识的提高和HTTPS成本的下降 , HTTPS已经越来越普及 。
很多互联网巨头也在力推HTTPS , 比如:
谷歌的Chrome浏览器在访问HTTP网站时会在地址栏显示不安全的提醒 。 微信要求所有的小程序必须使用HTTPS传输协议 。 苹果也要求所有在AppStore上架的应用必须采用HTTPS 。国内外的大部分主流网站也都已迁移至HTTPS , 可见HTTPS全面取代HTTP只是时间问题 。
说了这么多 , 究竟什么是HTTPS?它与HTTP相比有什么优缺点?其底层实现原理又是怎样的呢?下面就为你一一解答 , 先来看一下HTTP的弊端吧 。
HTTP的最大弊端:不安全
HTTP之所以被HTTPS取代 , 最大的原因就是不安全 , 至于为什么不安全 , 看了下面这张图就一目了然了 。

文章图片
HTTP数据传输过程
由图可见 , HTTP在传输数据的过程中 , 所有的数据都是明文传输 , 自然没有安全性可言 , 特别是一些敏感数据 , 比如用户密码和信用卡信息等 , 一旦被第三方获取 , 后果不堪设想 。
这里可能有人会说 , 我在前端页面对敏感数据进行加密不就行了 , 比如MD5加盐加密 。
这么想就太简单了 。 首先MD5并不是加密算法 , 其全称是MessageDigestAlgorithmMD5 , 意为信息摘要算法 , 是一种不可逆的哈希算法 , 也就是说经过前端MD5处理过的数据在服务器端是无法复原的 。
这里以密码举例 , 前端把用户密码通过MD5进行处理 , 并把得到的哈希值发送给服务器 , 服务器由于无法复原密码 , 就会直接用这个哈希值处理用户请求 。
所以第三方在获取这个哈希值后 , 可以绕过前端登录页面直接访问服务器 , 造成安全问题 。
另外 , MD5算法本身的安全性也存在缺陷 , 这里就不展开谈了 。 总之MD5 , SHA-1之类的哈希算法并不能让HTTP变得更安全 。
要想让HTTP更安全 , 只能使用真正的加密算法 , 因为加密算法可以用密钥加密或还原数据 , 只要确保密钥不被第三方获取 , 那就能确保数据传输的安全了 。
而这正是HTTPS的解决方案 , 那下面就来了解一下加密算法吧 。
加密算法
HTTPS解决数据传输安全问题的方案就是使用加密算法 , 具体来说是混合加密算法 , 也就是对称加密和非对称加密的混合使用 , 这里有必要先了解一下这两种加密算法的区别和优缺点 。
对称加密
对称加密 , 顾名思义就是加密和解密都是使用同一个密钥 , 常见的对称加密算法有DES、3DES和AES等 。
其优缺点如下:
优点:算法公开、计算量小、加密速度快、加密效率高 , 适合加密比较大的数据 。
缺点:交易双方需要使用相同的密钥 , 也就无法避免密钥的传输 , 而密钥在传输过程中无法保证不被截获 , 因此对称加密的安全性得不到保证 。
每对用户每次使用对称加密算法时 , 都需要使用其他人不知道的惟一密钥 , 这会使得发收信双方所拥有的钥匙数量急剧增长 , 密钥管理成为双方的负担 。
对称加密算法在分布式网络系统上使用较为困难 , 主要是因为密钥管理困难 , 使用成本较高 。
本文不对具体的加密算法做详细介绍 , 如果直接将对称加密算法用在HTTP中 , 会是下面的效果:

文章图片
对称加密数据传输过程
从图中可以看出 , 被加密的数据在传输过程中是无规则的乱码 , 即便被第三方截获 , 在没有密钥的情况下也无法解密数据 , 也就保证了数据的安全 。
但是有一个致命的问题 , 那就是既然双方要使用相同的密钥 , 那就必然要在传输数据之前先由一方把密钥传给另一方 , 那么在此过程中密钥就很有可能被截获 , 这样一来加密的数据也会被轻松解密 。
那如何确保密钥在传输过程中的安全呢?这就要用到非对称加密了 。
非对称加密
非对称加密 , 顾名思义 , 就是加密和解密需要使用两个不同的密钥:公钥(publickey)和私钥(privatekey) 。
公钥与私钥是一对 , 如果用公钥对数据进行加密 , 只有用对应的私钥才能解密;如果用私钥对数据进行加密 , 那么只有用对应的公钥才能解密 。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公钥对外公开;得到该公钥的乙方使用公钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的私钥对加密后的信息进行解密 。
如果对公钥和私钥不太理解 , 可以想象成一把钥匙和一个锁头 , 只是全世界只有你一个人有这把钥匙 , 你可以把锁头给别人 。
别人可以用这个锁把重要的东西锁起来 , 然后发给你 , 因为只有你一个人有这把钥匙 , 所以只有你才能看到被这把锁锁起来的东西 。
常用的非对称加密算法是RSA算法 , 其优缺点如下:
优点:算法公开 , 加密和解密使用不同的钥匙 , 私钥不需要通过网络进行传输 , 安全性很高 。 缺点:计算量比较大 , 加密和解密速度相比对称加密慢很多 。由于非对称加密的强安全性 , 可以用它完美解决对称加密的密钥泄露问题 , 效果图如下:

文章图片
客户端通过非对称加密把密钥KEY发送给服务器
在上述过程中 , 客户端在拿到服务器的公钥后 , 会生成一个随机码(用KEY表示 , 这个KEY就是后续双方用于对称加密的密钥) , 然后客户端使用公钥把KEY加密后再发送给服务器 。
服务器使用私钥将其解密 , 这样双方就有了同一个密钥KEY , 然后双方再使用KEY进行对称加密交互数据 。
在非对称加密传输KEY的过程中 , 即便第三方获取了公钥和加密后的KEY , 在没有私钥的情况下也无法破解KEY(私钥存在服务器 , 泄露风险极小) , 也就保证了接下来对称加密的数据安全 。
而上面这个流程图正是HTTPS的雏形 , HTTPS正好综合了这两种加密算法的优点 , 不仅保证了通信安全 , 还保证了数据传输效率 。
HTTPS原理详解
先看一下维基百科对HTTPS的定义:
HypertextTransferProtocolSecure(HTTPS)isanextensionoftheHypertextTransferProtocol(HTTP).Itisusedforsecurecommunicationoveracomputernetwork,andiswidelyusedontheInternet.InHTTPS,thecommunicationprotocolisencryptedusingTransportLayerSecurity(TLS)or,formerly,itspredecessor,SecureSocketsLayer(SSL).TheprotocolisthereforealsooftenreferredtoasHTTPoverTLS,orHTTPoverSSL.
HTTPS(HypertextTransferProtocolSecure)是基于HTTP的扩展 , 用于计算机网络的安全通信 , 已经在互联网得到广泛应用 。
在HTTPS中 , 原有的HTTP协议会得到TLS(安全传输层协议)或其前辈SSL(安全套接层)的加密 。 因此HTTPS也常指HTTPoverTLS或HTTPoverSSL 。
可见HTTPS并非独立的通信协议 , 而是对HTTP的扩展 , 保证了通信安全 , 二者关系如下:

文章图片
HTTP和HTTPS的关系
也就是说HTTPS=HTTP+SSL/TLS 。
接下来就是最重要的HTTPS原理解析了 , 老规矩先上图:

文章图片
HTTPS加密、解密、验证及数据传输过程
看上去眼花缭乱 , 不要怕 , 且听我细细道来 。 HTTPS的整个通信过程可以分为两大阶段:证书验证和数据传输阶段 , 数据传输阶段又可以分为非对称加密和对称加密两个阶段 。
具体流程按图中的序号讲解:
①客户端请求HTTPS网址 , 然后连接到server的443端口(HTTPS默认端口 , 类似于HTTP的80端口) 。
②采用HTTPS协议的服务器必须要有一套数字CA(CertificationAuthority)证书 , 证书是需要申请的 , 并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书(当然了是要钱的 , 安全级别越高价格越贵) 。
颁发证书的同时会产生一个私钥和公钥 。 私钥由服务端自己保存 , 不可泄漏 。 公钥则是附带在证书的信息中 , 可以公开的 。
证书本身也附带一个证书电子签名 , 这个签名用来验证证书的完整性和真实性 , 可以防止证书被篡改 。
③服务器响应客户端请求 , 将证书传递给客户端 , 证书包含公钥和大量其他信息 , 比如证书颁发机构信息 , 公司信息和证书有效期等 。
Chrome浏览器点击地址栏的锁标志再点击证书就可以看到证书详细信息 。

文章图片
B站CA证书
④客户端解析证书并对其进行验证 。 如果证书不是可信机构颁布 , 或者证书中的域名与实际域名不一致 , 或者证书已经过期 , 就会向访问者显示一个警告 , 由其选择是否还要继续通信 。
就像下面这样:

文章图片
浏览器安全警告
如果证书没有问题 , 客户端就会从服务器证书中取出服务器的公钥A 。 然后客户端还会生成一个随机码KEY , 并使用公钥A将其加密 。
⑤客户端把加密后的随机码KEY发送给服务器 , 作为后面对称加密的密钥 。
⑥服务器在收到随机码KEY之后会使用私钥B将其解密 。 经过以上这些步骤 , 客户端和服务器终于建立了安全连接 , 完美解决了对称加密的密钥泄露问题 , 接下来就可以用对称加密愉快地进行通信了 。
⑦服务器使用密钥(随机码KEY)对数据进行对称加密并发送给客户端 , 客户端使用相同的密钥(随机码KEY)解密数据 。
⑧双方使用对称加密愉快地传输所有数据 。
好了 , 以上就是HTTPS的原理详解了 , 如此精美的图搭配这么详细的过程解析 , 你再搞不懂就说不过去了吧哈哈 。
总结
再来总结一下HTTPS和HTTP的区别以及HTTPS的缺点吧 。
HTTPS和HTTP的区别:
最最重要的区别就是安全性 , HTTP明文传输 , 不对数据进行加密安全性较差 。 HTTPS(HTTP+SSL/TLS)的数据传输过程是加密的 , 安全性较好 。 使用HTTPS协议需要申请CA证书 , 一般免费证书较少 , 因而需要一定费用 。 证书颁发机构如:Symantec、Comodo、DigiCert和GlobalSign等 。 HTTP页面响应速度比HTTPS快 , 这个很好理解 , 由于加了一层安全层 , 建立连接的过程更复杂 , 也要交换更多的数据 , 难免影响速度 。 由于HTTPS是建构在SSL/TLS之上的HTTP协议 , 所以 , 要比HTTP更耗费服务器资源 。 HTTPS和HTTP使用的是完全不同的连接方式 , 用的端口也不一样 , 前者是443 , 后者是80 。 【看完这篇还搞不懂HTTPS,就来找我!】HTTPS的缺点:
在相同网络环境中 , HTTPS相比HTTP无论是响应时间还是耗电量都有大幅度上升 。 HTTPS的安全是有范围的 , 在黑客攻击、服务器劫持等情况下几乎起不到作用 。 在现有的证书机制下 , 中间人攻击依然有可能发生 。 HTTPS需要更多的服务器资源 , 也会导致成本的升高 。
推荐阅读
- 这款抹茶麻薯软欧,简单好做,满满坚果馅,好吃还不腻
- 1碗面粉,不加水,锅里蒸一蒸,做香甜可口的发糕,比蛋糕还香
- 番茄炒鸡蛋先炒番茄还是先炒鸡蛋?其实都不对,正确方法送给你
- 这几道菜在我家太受欢迎, 做法还很简单!
- 做蛋炒饭,先炒蛋呢还是先炒饭呢很多人做的不对,难怪不好吃
- 天冷了,怎能不吃此菜?十分钟就上桌,香辣可口还美味,贼香
- 火星|拍摄11064张照片后,火星毅力号看到了什么?这次还真看到了
- 猴面包树|这种树“能吃能喝还能住”,养活无数非洲人,引进中国后画风变了
- 水煮鱼到底怎么做即简单还好吃呢?下面三款家常做法你觉得怎样?
- 春天,吃鱼吃肉不如吃它,8块钱炒一盘,鲜香营养,好吃还不发胖
