TLS协议的TLS握手协议

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TLS协议的TLS握手协议相关的知识,希望对你有一定的参考价值。

TLS 为传输层安全性协议,是 mysql 在客户端与服务器之间进行加密连接的协议。TLS 有时被称为 SSL(安全套接层),但是 MySQL 实际上并不使用 SSL 协议进行加密连接,因为它的加密很弱。TLS 协议通过加密数据来确保在两个通信应用程序之间提供隐私和数据完整性,以便任何第三方都无法拦截通信。它还会验证对等方以验证其身份。通过在两个对等点之间提供安全的通信通道,TLS 协议可以保护消息的完整性并确保其不会被篡改。MySQL 支持多种 TLS 版本协议,此次测试使用 8.0 的 client 为 TLSv1.2。

从 wireshark 中看一下 TLS 握手的步骤:

参考技术A

TLS 握手协议提供的连接安全具有三个基本属性:
1.可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。
2.共享加密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。
3.协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。

TLS协议扫盲(握手,非对称加密,证书,电子签名等)

想学习TLS协议最好的方法应该是去看RFC,但如果对安全传输协议没有一些基本认识的人很难一上来就读懂RFC里面的种种细节和设计原则,所以这里为了能够进一步去弄懂TLS协议,把一些基本的知识放在这里,算是扫下盲。

1. TLS与SSL的区别:SSL是TLS的前身,TLS做出了一些使其更安全的改进。事实上,在客户端向服务器发起连接请求时,会附上的所支持的协议版本;这里的协议版本标识了是SSL或TLS(3.1为TLS)

2. TLS在真正传输过程中使用对称加密,因为对称加密效率更高。而对称加密所使用的key是在握手过程中使用特定的算法协商出来的。老版本的SSL使用RSA协商算法,需要使用服务器的公钥来加密传输客户端随机生成的对称key。这种方法有一些安全隐患,最新的Diffie-Hellman算法可以在协商过程中不传递任何关于对称key的信息,因而更加安全。

3. 客户端使用证书对服务器进行身份验证。证书一般由其他机构发放,证书会包含证书的公钥,并会在结尾处对证书内容做哈希并用发放机构自己的私钥对哈希值做加密(电子签名)。客户端可以用证书中发放机构的公钥对证书结尾的电子签名做解密,并验证解密出的哈希值与证书正文的哈希值是否一致,以验证证书是否确实为所宣称的发放机构发放。这个验证发放者的过程可以不断递归直到验证到的一个可信的发放者,或者电子签名验证失败。以上所述的过程只能验证证书本身的可信性,而不能验证提供这个证书的服务器实际上持有相关证书。关于如何验证服务器确实是证书的持有者,这个我没太弄明白,可能有两种方法:1. 让服务器用证书中公钥对应的私钥加密一段文字,客户端用证书的公钥解密这段密文并验证服务器的私钥是否对应证书的公钥(如何防范人在回路?)2. 验证证书中的CN与服务器的CN(这个我的问题也是如何防止人在回路机器去伪造信息?)

大体就是这几个关键点,以后有时间再补充细节。

参考资料:

https://developer.mozilla.org/en-US/docs/Archive/Security/Introduction_to_Public-Key_Cryptography#How_CA_Certificates_Are_Used_to_Establish_Trust

https://developer.mozilla.org/en-US/docs/Archive/Security/Introduction_to_SSL

http://chimera.labs.oreilly.com/books/1230000000545/ch04.html#TLS_FORWARD_SECRECY

以上是关于TLS协议的TLS握手协议的主要内容,如果未能解决你的问题,请参考以下文章

TLS协议扫盲(握手,非对称加密,证书,电子签名等)

TLS握手协议

SSL/TLS 握手过程详解***

HTTPS协议详解:TLS/SSL握手过程

TLS1.2协议设计原理

TLS1.3 握手协议的分析