4

真正“搞”懂HTTPS协议15之安全的定义 - Zaking

 1 year ago
source link: https://www.cnblogs.com/zaking/p/17115440.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

真正“搞”懂HTTPS协议15之安全的定义

  前面我们花了很大的篇幅来讲HTTP在性能上的改进,从1.0到1.1,再到2.0、3.0,HTTP通过替换底层协议,解决了一直阻塞性能提升的队头阻塞问题,在性能上达到了极致。

  那么,接下来,我们来聊一聊HTTP在安全上都做了哪些事情,HTTPS是如何帮助HTTP解决安全问题的。

  那为什么要有HTTPS呢?其本质原因就是因为我们之前说过的哈,因为HTTP是不安全的。它明文的特点,虽然给我们的学习带来了一定的便利性,但是也正是因为如此,在整个报文的传输过程中,任何人都能在链路中访问、截获、修改或者伪造请求/响应的数据。

  比如,就拿前两篇文章讲的代理服务。它作为 HTTP 通信的中间人,在数据上下行的时候可以添加或删除部分头字段,也可以使用黑白名单过滤 body 里的关键字,甚至直接发送虚假的请求、响应,而浏览器和源服务器都没有办法判断报文的真伪。

  这对于网络购物、网上银行、证券交易等需要高度信任的应用场景来说是非常致命的。如果没有基本的安全保护,使用互联网进行各种电子商务、电子政务就根本无从谈起。

  对于安全性不那么高的门户网站、新闻网站、视频网站等,也可能会在页面中嵌入广告,分流用户,致使网站损失。

  对于我们普通人来说,危害性更大,不知不觉,你的隐私信息就被泄露,甚至威胁人身和财产安全。

  我们想象一下,就像《三体》小说中的黑暗森林定义,他人即地狱,所有的一切都是不可靠,不可信的。

  所以,保证HTTP报文的数据安全,成了一件必然且急迫的事情。

一、安全的定义

  首先,我们想要建立安全,有一个前提,就是我们要先知道什么是安全。那什么样的通信过程才算是“安全”呢?

  通常认为,如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认

  机密性(Secrecy/Confidentiality),是指对数据的保密,只能由可信的人访问,对其他人是不可见的”秘密“,简单的说就是不能让不相关的人看到不该看的东西。比如战争时代,电台传递的信息都是加密的,然后传递的终端的接收人里会有个密码本,根据密码本来解密传递的加密信息,如果这个密码本被敌军获取或者破解,你的策略和方针就毫无秘密可言。

  完整性(Integrity),也叫做一致性,是指数据在传输过程中没有被篡改,不多也不少,”完完整整“的发送给对方。机密性虽然可以保证让数据保密,但是并不能防止数据被改动,假如黑客在获取大量加密数据后,通过碰撞碰撞出某些关键字,那么黑客就可以替换其中一部分数据,或者调整顺序,破坏通信数据的可靠性。

  身份认证(Authentication),是指确认对方的真实身份,也就是”怎么证明你真的是你“,保证消息之发送给可信的人。如果通信时另外一方是一个假冒网站,那么数据再保密再完整也没用,黑客完全可以使用冒充的身份套出各种信息,加密不加密,完整不完整,没啥意义,因为你最终的接收人就是不可靠的。

  那么在现实生活中,你怎么证明你是你呢?嗯……身份证呗。我们后面就会详细的说一下网站的身份证是如何工作的。

  不可否认(Non-repudiation/Undeniable),也叫做不可抵赖,意思是不能否认已经发生过的行为,不能说话不算数,不认账。

  使用前三个特性,可以解决安全通信的大部分问题,但是如果缺少了不可否认,那通信的事务的真实性就得不到保证,有可能出现说话不负责的情况。

  所以,只有同时具备了机密性、完整性、身份认证、不可否认四个特性,通信双方的利益才能得到保障,才能算得上是真正的安全。

二、What is HTTPS?

  那什么是HTTPS?一句话,就是为HTTP增加了安全通信的四大特性。

  其实HTTPS特别简单,RFC文档只有7页,里面规定了新的协议名https默认端口号是443,至于其它的请求-应答模型、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用HTTP,没有任何新的东西。

  也就是说,HTTPS除了在安全上的改进,它拥有HTTP一切的优缺点,一模一样,没区别。

  那HTTPS是如何做到安全的四大特性的呢?嗯……就是多出来的那个S。

  它把HTTP下层的传输协议由TCP/IP换成了SSL/TLS,由”HTTP over TCP/IP“变成了”HTTP over SSL/TLS“,让HTTP运行在了安全的SSL/TLS协议上,收发报文不再使用Socket API,而是调用专门的安全接口。

  

1184971-20230213165002079-253979885.png

  所以说,其实HTTPS并没有啥特别的地方,全是靠SSL/TLS来支持。我们只要学会了SSL/TLS,HTTPS自然就手到擒来了。

三、What is SSL/TLS

  SSL即安全套接层(Secure Sockets Layer),在OSI模型中处于第5层,也就是会话层,由网景公司于 1994 年发明,有 v2 和 v3 两个版本,而 v1 因为有严重的缺陷从未公开过。

  SSL 发展到 v3 时已经证明了它自身是一个非常好的安全通信协议,于是互联网工程组 IETF 在 1999 年把它改名为 TLS(传输层安全,Transport Layer Security),正式标准化,版本号从 1.0 重新算起,所以 TLS1.0 实际上就是 SSLv3.1。

  到今天 TLS 已经发展出了三个版本,分别是 2006 年的 1.1、2008 年的 1.2 和2018年的 1.3,每个新版本都紧跟密码学的发展和互联网的现状,持续强化安全和性能,已经成为了信息安全领域中的权威标准。

  目前应用的最广泛的 TLS 是 1.2,而之前的协议(TLS1.1/1.0、SSLv3/v2)都已经被认为是不安全的,各大浏览器即将在 2020 年左右停止支持,所以接下来的讲解都针对的是 TLS1.2。

  TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。

  浏览器和服务器在使用 TLS 建立连接时需要选择一组恰当的加密算法来实现安全通信,这些算法的组合被称为“密码套件”(cipher suite,也叫加密套件)。

  其实 TLS 的密码套件命名非常规范,格式很固定。基本的形式是“密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法”,比如”ECDHE-RSA-AES256-GCM-SHA384“的密码套件的意思就是:

  “握手时使用 ECDHE 算法进行密钥交换,用 RSA 签名和身份认证,握手后的通信使用 AES 对称算法,密钥长度 256 位,分组模式是 GCM,摘要算法 SHA384 用于消息认证和产生随机数。”

四、还要说一下OpenSSL

  聊完了TLS,我们就不得不谈一下OpenSSL,它是一个著名的开源密码学程序库和工具包,几乎支持所有公开的加密算法和协议,已经成为了事实上的标准,许多应用软件都会使用它作为底层库来实现 TLS 功能,包括常用的 Web 服务器 Apache、Nginx 等。

  OpenSSL 是从另一个开源库 SSLeay 发展出来的,曾经考虑命名为“OpenTLS”,但当时(1998 年)TLS 还未正式确立,而 SSL 早已广为人知,所以最终使用了“OpenSSL”的名字。

  由于 OpenSSL 是开源的,所以它还有一些代码分支,比如 Google 的 BoringSSL、OpenBSD 的 LibreSSL,这些分支在 OpenSSL 的基础上删除了一些老旧代码,也增加了一些新特性,虽然背后有“大金主”,但离取代 OpenSSL 还差得很远。

  本篇,最重要的就是安全通信的四大特性,这个东西大家一定要记住,我们后面的学习都是基于此的TLS实现。我们还了解了其实HTTPS的核心就是S,而S其实就是SSL和TLS,而SSL又是TLS的前身,所以根本的学习,就来到了TLS。而OpenSSL就是TLS的具体实现。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK