我正在阅读 tls-crypt,并且很好奇这是否会增加安全性并减少握手过程中密钥被泄露的可能性,并且它是否比 tls-auth 提供更好的安全性?
也许有人可以更好地解释 tls-auth 和 tls-crypt 以及它们如何提高安全性?
我当前的客户端文件:
client
tls-client
dev tun
proto udp
remote 1.2.3.4 9999
<ca>
</ca>
<cert>
</cert>
<key>
</key>
pull
auth-nocache
cipher AES-256-CBC
keysize 256
compress lz4-v2
reneg-sec 36000
keepalive 30 120
答案1
TLS 握手大致可以分为以下步骤:
- 客户端向服务器发送“客户端 hello”,以及客户端的随机值和支持的密码套件。
- 服务器向客户端响应“server hello”,以及服务器的随机值和选择的密码套件。
- 服务器将其证书发送给客户端进行身份验证。
- 客户端验证服务器身份。
- 客户端创建一个随机的预主密钥,并使用服务器证书中的公钥对其进行加密。
- 客户端将加密的预主密钥发送给服务器。
- 如果需要,服务器可以向客户端请求证书。
- 服务器和客户端都根据预主密钥生成会话密钥。
- 服务器和客户端现在可以使用会话密钥交换加密消息。
tls-auth 和 tls-crypt 之间的区别在于,从步骤 1 开始,tls-crypt 将使用预共享密钥加密所有消息。
这有以下几个好处:
- 它隐藏了与 OpenVPN 服务器的 TLS 握手的初始化。这在检测和阻止 OpenVPN 协议签名的某些情况下很有用。
- 它可以防止 TLS 拒绝服务攻击。使用 tls-auth,攻击者可以同时打开数千个 TLS 连接,但不提供有效证书,从而堵塞可用端口。使用 tls-crypt,服务器将在步骤 1 中预先拒绝连接。
- 数据被加密两次,一次由 tls-crypt 加密,一次由 TLS 会话加密。