问题描述
不使用 SSL/TLS 的 HTTP 通信的风险
窃听风险(eavesdropping):HTTP 报文明文传输,第三方可以获知通信数据;
篡改风险(tampering):第三方可以修改通信内容;
冒充风险(pretending):第三方可以冒充他人身份参与通信;
我们创建该部分笔记是为了明白以下问题:
2)它们是如何工作的,握手流程是怎样的?证书中包含哪些信息?Client 如何验证 Server?
3)证书、密钥、在 Nginx HTTPS 中配置使用的些什么文件?
4)完整的证书签发流程是怎样的,如何创建自签名证书?
解决方案
SSL(Secure Sockets Layer,安全套接字)及 TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议;
TLS 是 SSL 的标准化后的产物。SSL 与 TLS 在传输层与应用层之间对网络连接进行加密,不影响原有的 TCP 协议和 HTTP 协议,所以使用 HTTPS 不需要对 HTTP 页面进行太多的改造;
特性特征
使用 SSL/TLS 的 HTTPS 通信的特点
数据具备完整性,HTTPS 使用 SSL/TLS 加密传输所有的 HTTP 报文,所有信息都是加密传播,第三方无法窃听,即使截获也无法篡改;
数据具有校验机制,一旦被篡改,通信双方会立刻发现;
数据来源可信,配备身份证书,防止身份被冒充;
概念术语
What layer is TLS?
根据 OSI protocols – Wikipedia 与 packet – What layer is TLS? 来说,没有适合 TLS 的 ISO Model 曾,不管放在哪个曾都很牵强;
TLS 使用 TCP 协议,因此在第四层之上。而其使用的握手信息,像是第五层,因此 TLS 应该属于第六曾或第七层(第六层,定义和加解密来自应用层的数据);
但是,应用通常将 TLS 视为传输层,并且应用层具有自己的会话机制,因此 TLS 又不能查过第四层;
最终结论,有人将 TLS 划分在第五层,Wikipedia 将其划分在第六层。暂时还没有定论,并经关心协议属于哪个层并不是什么关键问题,而且 OSI Model 只是个模型,并不是什么事实标准;
TLS,Transport Layer Security
传输层安全(TLS),以及已弃用的前身安全套接字层(SSL),都是密码协议,用于在网络上提供通讯安全。该协议几个版本在一些应用中广为使用,比如邮件、浏览器、即时通讯、VoIP 等等;
TLS and SSL
早期对传输层安全性的研究工作包括安全网络编程(SNP)应用程序编程接口(API),该接口于 1993 年探索了一种安全传输层 API 的方法,与 Berkeley 套接字非常相似的,以便于安全地改进现有的网络应用程序措施;
而 SSL 与 TLS 都是为了解决传输层安全性的问题而出现的协议。所以 SSL 和 TLS 都是协议。可以说 TLS 和 SSL 是为解决同一问题在不同时期的产物。SSL 协议目前已经废弃,推荐使用 TLS 协议;
协议发展历史
年份 | 协议版本 | 缩写 | 描述 |
---|---|---|---|
0000 | SSL Version 1.0 | ||
1995 | SSL Version 2.0 | SSLv2 | |
1996 | SSL Version 3.0 | SSLv3 | |
1999 | TLS Version 1.0 | TLSv1 | |
2016 | TLS Version 1.1 | TLSv1.1 | |
2008 | TLS Version 1.2 | TLSv1.2 | |
2018 | TLS Version 1.3 | TLSv1.3 |
网景开发了原始的 SSL 协议,版本 1.0,但从未公开发布,因为协议存在严重的安全漏洞;
在 1995 年 2 月发布的版本 2.0 也包含许多安全漏洞,需要设计 3.0 版本;
在 1996 年发布的 SSL 版本 3.0,协议的完全重新设计,Paul Kocher 与网景工程师 Phil Karlton 和 Alan Freier 合作完成,其中 Christopher Allen 和 Tim Dierks 参与了 Consensus Development 的参考实现。较新版本的 SSL/TLS 基于 SSL 3.0。1996 年的 SSL 3.0 草案由 IETF 作为 RFC 6101 中的历史文档发布;
1995 年至 1998 年,网景通讯的首席科学家 Taher Elgamal 被称为为“SSL 之父”;
2014 年,SSL 3.0 被发现容易受到影响 SSL 中所有分组密码的 POODLE 攻击;RC4 是 SSL 3.0 支持的唯一非块密码,在 SSL 3.0 中也可以使用;
RFC 6176 在 2011 年禁止使用 SSL 2.0,并且 RFC 7568 在 2015 年 6 月后也禁止使用 SSL 3.0;
TLS 也是一个协议。为了解决传输层安全性的问题而出现的协议;
于 1999 年 1 月首次在 RFC 2246 中定义为「SSL 3.0 版的升级版」,由 Christopher Allen 和 Consensus Development 的 Tim Dierks 编写。正如 RFC 中所述,“此协议与 SSL 3.0 之间的差异并不显着,但它们足以阻止 TLS 1.0 和 SSL 3.0 之间的互操作性”。TLS 1.0 确实包含了一种方法,通过该方法,TLS 实现可以将连接降级到 SSL 3.0,从而削弱安全性;
PCI 理事会建议组织在 2018 年 6 月 30 日之前从 TLS 1.0 迁移到 TLS 1.1 或更高版本;
于 2006 年 4 月在 RFC 4346 中定义。它是 TLS 1.0 版的更新;
于 2008 年 8 月在 RFC 5246 中定义。它基于早期的 TLS 1.1 规范;
在 2018 年 8 月的 RFC 8446 中定义。它基于早期的 TLS 1.2 规范;
OpenSSL and GnuTLS
它们都是 SSL 协议与 TLS 协议的实现,两者都支持 SSL 协议和 TLS 协议(因此不能根据名称来判断功能);
类似的实现还有 SharkSSL、MatrixSSL 等等,参考 Comparison of TLS implementations 页面;
相关链接
参考文献
Wikipedia/Transport Layer Security
https://www.ietf.org/rfc/rfc5246.html