「TLS」- Transport Layer Security

  CREATED BY JENKINSBOT

问题描述

不使用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 – Wikipediapacket – 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 页面。

相关链接

Public key infrastructure

参考文献

Wikipedia/Transport Layer Security
https://www.ietf.org/rfc/rfc5246.html