tl; dr 回复是:是的,您的理解是正确的。
在 TLS 模式下,OpenVPN 建立一个 TLS 会话以在该 TLS 会话上执行密钥交换,以获取用于加密/验证隧道有效负载数据的密钥。这是一个普通的 TLS 会话,就像您在浏览器中打开一个 HTTPS 网站一样,只是它不仅会执行服务器身份验证,还会执行客户端身份验证,因此客户端也需要带有私钥的证书。
TLS 会话交换本身应该是安全的,毕竟这是您访问在线银行网站时所拥有的一切,但这只是理论。在实践中,每个协议都有弱点,即使协议没有弱点,协议实现也可能有弱点。为了使攻击者更难利用这些弱点,您可以使用 tls-crypt,它将使用静态密钥文件中的密钥加密和验证 TLS 数据包。现在,攻击者还需要获得该密钥文件的副本,否则即使知道可用的攻击并有可能将其关闭(例如,能够监控流量或执行中间人附加) ) 不会帮助他。
使用 tls-crypt,“TLS 通道”上运行的所有数据都使用与隧道有效负载数据相同的算法以及静态密钥文件中的密钥进行加密和验证。对于 TLS 有效负载数据(用户身份验证、密钥交换、配置推送等),这意味着该数据被加密和身份验证两次。一次通过 tls-crypt 一次通过 TLS 会话本身,作为 TLS 会话本身用于加密和验证数据,当然,即使不使用 tls-crypt,用户验证、密钥交换和配置推送必须经过加密和认证;否则,如果不是这种情况,整个协议将如何安全?
尽管为偏执的 VPN 管理员增加了额外的安全性(尽管考虑到过去几年发现的可怕的 SSL/TLS 错误,这些人看起来不像过去那样偏执了),它还有另一个积极的影响:它可以防止某些类型的拒绝服务攻击。即使攻击者无法侵入您的 VPN,他仍可能尝试同时打开数千个 TLS 会话。由于无法提供有效的证书,所有这些会话最终都会失败,但在这种情况下(默认需要 60 秒),TLS 会话对象可以为小型嵌入式设备使用大量内存资源并且打开数千个这样的设备可以迅速让这样的设备崩溃。使用 tls-crypt,发送的第一个数据包将无法正确验证/解密,因此会立即被丢弃。