当前,为了保护通信安全,使用最广泛的协议就是 SSL/TLS 。
SSL是啥?
先举一个例子 。假设你在你的浏览器里输入了www.demo.com 这个网址,那么你的浏览器就会使用一堆协议来连接Web服务器并返回你想要的页面 。返回页面后 , 你可能会做一些注册、登录之类的操作 。
这个场景里直接相关的通信协议有以下几个:
- 浏览器请求页面和解析响应需要使用到 HTTP(Hypertext Transfer Protocol) 协议 。HTTP 使用人类可读的格式来包裹实际请求和响应的内容 。也就是说 , 你可以不在任何工具的帮助下查看和读取HTTP的消息 。
- HTTP 消息使用 TCP(Transmission Control Protocol) 协议进行封装 。TCP 是一个二进制协议,所以并不是人类可读的,通常你需要其它工具才能读懂请求的每个字节是什么意思 。
- TCP 消息又使用 IP(Internet Protocol) 协议来进行封装 , 而 IP 消息是又被进一步封装 …
同样在这个场景里 , 任何处于浏览器和Web服务器通信线路中间的人都可以被动的观察和读取您的请求和服务器的响应 。而这个人我们叫他中间人(The Man in the Middle,简称MITM) 。更糟糕的是,这种MITM攻击者还可以主动篡改和重新排序消息 。
这就很糟糕了,你的账户密码,你的信用卡密码,以及你的隐私信息都可以通过这样的方式泄露出去 。
所以 , 在90年代,网景的一个团队发明了 SSL(Secure Sockets Layer) 协议 。在那之后,HTTPS(Hypertext Transfer Protocol Secure) 协议就允许浏览器通过结合 HTTP 和 SSL 协议来保护它到网站的通信安全了 。
通过使用HTTPS协议 , 上述场景中,MITM 攻击者就无法看到加密的信息了,并且也无法破解、篡改、重放或重新排序信息了 。
那么 TLS 又是啥?
从 SSL 的第一个版本,到它的最新版 3.0,发生了很多事情 。由于不良的设计和算法组合 , 所有的 SSL 版本都不兼容 。而在 SSL 3.0 发布之后,这个协议正式被移交到了 IETF(InternetEngineering Task Force,互联网工程任务组),该组织的主要工作就是发布RFCs(Request For Comments,请求评议)标准 。
这时 SSL 这个名字就正式被弃用了 , 改为使用 TLS(Transport Layer Security) 。而 TLS 1.0 是在 1999 年作为 RFC 2246 发布的 。
TLS 的最新版是 TLS v1.3,在 RFC 8446 里进行的描述,发布于2018 年 。
现如今,如果网站是 HTTP 的,那么(Chromium内核)浏览器会有一个 NotSecure(不安全)的提示:
而如果采用的是 HTTPS,那么网址前面会显示一个锁:
现在 TLS 不仅仅是一个保护 Web 安全的协议,它已在不同场景以及不同类型的应用和设备中作为通信安全协议进行应用了 。
在 TLS 术语中,两个想要保护通信安全的参与者叫做 Client 和 Server,也就是客户端和服务器 。而通信的初始化必须由客户端发起 。例如在HTTPS 协议里,浏览器就是客户端 。
TLS 客户端
而客户端必须被配置好,并且需要提供给它足够的关于它想连接的服务器的信息才行 , 这些信息通常是 IP 地址和端口号,这样客户端才能建立一个安全的连接 。【ssl是什么 ,什么是 TLS,什么是 HTTPS】TLS 客户端的接口,如下图:
TLS 服务器端
TLS 服务器的接口如图:它仅仅需要一些配置信息并等待客户端的请求以便来创建安全连接 。
需要提一下的是:TLS 是工作于 TCP 上的协议 。如果想保护 UDP 连接 , 那么可以使用 DTLS(D 表示 Datagram)协议,它用起来和 TLS 挺像 。