为什么需要TLS?
在学习kubernetes的过程中,网络,安全,存储,是很多人的拦路虎,因为里面涉及的概念和名词很多,很容易把人搞晕。
因此很多人也就对这几块内容选择性忽略,殊不知这些内容才是kubernetes的核心。
一个关于学习的统计数据表明,62%的人在学习安全知识的过程中,都会感到困难或者不舒服,我自己也是如此。
因此花了一些时间,整理了一篇文章,帮助自己学习的同时,也希望帮助大家理解TLS。
首先为什么需要TLS?TLS的全称是Transport Layer Security,传输层安全协议。前身是SSL,Secure Sockets Layer,安全套接字层协议。
在网络传输过程中,无论是互联网访问,还是内网数据传输,你都不希望使用明文传输吧,使用明文就像在网上裸奔,访问信息很容易被中间人窃取,篡改,伪造等。
因此TLS应运而生,TLS通过加密技术,确保数据由明文变成了随机的字符(密文),保证在传输过程中不被窃取和篡改。
TLS如何实现安全目标呢?
首先它定义了CIA三要素:
- 机密性Confidentiality:数据加密,数据只能被客户端和服务器所理解。
- 完整性Integrity:使用哈希算法,确保数据未被篡改。
- 身份认证Authenticity:防冒充,确认你在和预期的实体对话。
TLS最基本的概念,在后边的文章中会反复提到:
秘钥Key:加密和解密数据所使用的参数。
- 对称加密Symmetric Encryption:加密和解密使用相同的秘钥,速度快,适合大数据量传输。
- 非对称加密Asymmetric Encryption:加密和解密使用一对秘钥,公钥和私钥,速度慢,适合小数据量传输,一般用于秘钥交换。
哈希算法Hash Algorithm:对数据进行摘要计算,生成固定长度的哈希值,用于数据完整性校验。
数字证书Digital Certificate:由“权威机构”颁发的电子文档,用于证明公钥的合法性,包含公钥,持有者信息,有效期等。证书通过提交CSR(证书签名请求)给CA机构申请获得。
CA Certificate Authority:证书授权机构,负责颁发和管理数字证书的机构。
让我们来看看这些基本概念都是干什么用的:
对称加密的目的:加密,对应的三要素:机密性
非对称加密的目的:加密,对应的三要素:机密性
还可以用于更多的事情:
- 交换“预主密钥pre-master secret”: 用于生成对称加密的会话密钥session key,这样浏览器和服务器都拥有了会话密钥
- 通过私钥和公钥配对来提供真实性,这就是签名的概念。对应的三要素:真实性 哈希算法提供完整性。 似乎这一切就很完美了,但确实是这样吗?
但仍然可能存在一个问题,假如攻击者伪装成服务器,向浏览器发送数据,浏览器如何确认对方是“正牌货”呢?
因此必须引入PKI(public key infrustructure)证书颁发机构的概念,相当于一个第三方来告诉浏览器和服务器,对方是合法可信任的实体。保证了真实性Authenticity。
所以这不光是复杂的技术,更是人类的智慧!
为了满足以上的需求,因此需要使用秘钥套件。
比如HTTPS:ECDHE-RSA-AWS128-GCM-SHA256
解释:
ECDHE: premaster secret exchange algorithm
RSA: client and server authentication algorithm
AES128-GCM: symmetric encryption algorithm
SHA256: hashing algorithm
HTTPS使用的加密算法特点:
RSA:非对称加密算法,一般2048位,使用一对密钥,公钥和私钥,公钥和私钥有数学关系。一般公钥用来加密数据,私钥用来解密数据。RSA算法的安全性基于大数分解的困难性,即两个大质数相乘的结果很难被分解。
ECC:椭圆曲线加密算法,非对称加密算法的一种,使用椭圆曲线数学结构来生成公钥和私钥。相比RSA,ECC在相同的安全级别下,密钥长度更短,计算效率更高。
AES:对称加密算法,使用相同的密钥进行加密和解密。AES算法依赖于明文,它将明文切成128位的块,然后对这些块进行加密。
HTTPS使用对称加密和非对称加密的混合算法,如果使用RSA进行密钥交换,AES进行数据加密和传输。还有很多算法组合方式。
TLS session key 大致生成过程
- initial connection初始化连接:浏览器发送握手信号给服务器,告诉服务器想要一个安全连接
- asymmetric encryption for key exchange对秘钥交换使用非对称加密:握手期间,服务器发送公钥给浏览器,接着浏览器生成一个随机对称session key,然后用服务器公钥加密,然后发回给服务器
- decryption by server服务器解密:服务器用私钥解密收到的信息,获取session key
- symmetric encryption for data transfer使用对称加密进行数据传输:现在双方都有session key,在他们沟通过程中切换为对称加密,这样效率比非对称加密高很多
- session key的特点:每个session key都是临时的,对每个session来说都是唯一的,及时这个session key被攻破也只影响当前的session。新的session会产生新的session key
TLS连接过程,用来交换的各种东西,以及他们都是怎么来的
- 首先服务器有3个东西,CA签发的证书,一套公钥和私钥
- 客户端初始化一个TLS握手:发送"Client Hello",支持的TLS版本信息,一个包含时间戳的客户端随机数,session id [明文]
- 服务器回应:发送“Server Hello”,使用客户端支持的加密算法,支持的TLS版本,服务器随机数,session id和扩展信息 [明文]
- 服务器发送CA签发的证书
- 客户端使用CA的公钥解密证书并验证证书确实发自服务器端
- 客户端生成预主密钥,并通过服务器的公钥(证书中包含)发送给服务器
- 服务器通过自己的私钥,解密并获得预主密钥
- 双方通过客户端随机数,服务器随机数和预主密钥,生成主秘钥
- 通过主秘钥生成session key
- 客户端和服务器各自通过session key加密“finished”信息给对方,确认双方都有正确的session key
- 后续同一个session内数据传递使用session key加密

Top comments (0)