先思考问题:
- TLS是什么?
- TLS能做什么?
- 它怎么做到的?
TLS介绍
TLS 全称为 Transport Layer Security(传输层安全),其前身是 SSL,全称为 Secure Sockets Layer(安全套接字层),它的作用是为上层的应用协议提供安全的通信,比如众所周知的 HTTP 组合 TLS = HTTPS。
这里的安全指:
- 保密性
传输过程不能被窃听 - 完整性
传输过程不能被篡改 - 身份认证
能确信对方的身份
TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行建立加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。
简单来说,TLS就是一个混合的密码系统,通过结合各种密码技术,来达成安全通信的效果。
TLS涉及的密码技术(上面的安全问题,是用下面的技术做到的):
- 对称加密
用来确保机密性 - 伪随机数生成器
用来生成密钥,防被预测 - 非对称加密、Diffie-Hellman
用来密钥配送、密钥交换 - Hash、消息认证码
防消息篡改、对数据认证 - 数字证书
对通信对象进行认证
好家伙!密码学工具包的工具都被你用了个遍 - _ -。下文SSL、TLS 混着用,都一个意思。下面来学习它的流程,看看TLS是如何把这些工具都组合起来使用的。
HTTS流程
原本的HTTP是明文传输消息的,如果想要加密传输消息,可以用TLS(Transport Layer Security)作为对通信进行加密的协议,然后在此之上承载HTTP(图14-3)。通过将两种协议进行叠加,我们就可以对 HTTP的通信(请求和响应)进行加密,从而防止窃听。通过SSL/TLS进行通信时URL 不是以 http:// 开头,而是以 https:// 开头。

密码套件
TLS就是一个密码套件,有一下特性:
用途广泛

零件自由替换
SSL/TLS提供了一种密码通信的框架,这意味着SSL/TLS中使用的对称密码、公钥密码数字签名、单向散列函数等技术,都是可以像零件一样进行替换的。也就是说,如果发现现在所使用的某个密码技术存在弱点,那么只要将这一部分进行替换就可以了。
尽管如此,也并不是说所有的组件都可以自由选择。由于实际进行对话的客户端和服务器必须使用相同的密码技术才能进行通信,因此如果选择过于自由,就难以确保整体的兼容性为此,SSL/TLS 就像事先搭配好的盒饭一样,规定了一些密码技术的“推荐套餐”,这种推荐套餐称为密码套件(cipher suite)。
TLS协议认识
下面内容基于TLS 1.2(RFC5246) 规范,
分层来理解TLS协议:
TLS 协议是由:
- TLS 握手协议( TLS handshakeprotocol)
- TLS记录协议(TLS record protocol)
这两层协议叠加而成的。
位于底层的 TLS记录协议负责进行加密,而位于上层的 TLS握手协议则负责除加密以外的其他各种操作。
上层的TLS握手协议又可以分为4个子协议:
- 握手协议
- 密码规格变更协议
- 警告协议
- 应用数据协议

握手协议
握手协议是TLS握手协议的一部分,负责生成共享密钥以及交换证书。其中,生成共享密钥是为了进行密码通信,交换证书是为了通信双方相互进行认证。
握手协议这一名称中的“握手”(handshake),是服务器和客户端在密码通信之前交换一些必要信息这一过程的比喻。
由于握手协议中的信息交换是在没有加密的情况下进行的(即使用“不加密”这一密码套件),也就是说,在这一协议中所收发的所有数据都可能被窃听者Eve窃听,因此在这一过程中必须使用公钥密码或者 Difie-Hellman 密钥交换。

请描述主密钥是怎么来的?
todo
Reference
《图解密码技术》
http://www.freeoa.net/news/product/entpri-upgrade-ssltalg-for-holes_1861.html
https://xiaochaowei.com/2018/09/23/IllustrationCryptology14/
浙公网安备 33010602011771号