尽管已配置,OpenVPN HMAC 身份验证仍失败

尽管已配置,OpenVPN HMAC 身份验证仍失败

我正在尝试设置一个新设备来连接到我的 OpenVPN 服务器。新设备是一个没有GUI的Linux系统。我从桌面 Linux 系统导出配置文件并进行了必要的更改。

桌面系统可以连接VPN。但是新系统无法连接。日志报告 TLS 握手超时。在服务器上我看到以下条目:

TLS Error: cannot locate HMAC in incoming packet from ...

这表明客户端尚未配置 HMAC 身份验证,但服务器期望进行 HMAC 身份验证。但是,此配置是从可以运行并配置了 HMAC 密钥的客户端导出的。这是客户端配置:

client
remote 'vpn.example.org'
ca 'ca.pem'
cert 'cert.pem'
key 'key.pem'
cipher AES-128-CBC
dev tun
proto udp
verify-x509-name 'vpn.example.org'
tls-auth 'hmackey.pem' 1
nobind
auth-nocache
script-security 2
persist-key
persist-tun

HMAC 密钥在所有系统上都是相同的。怎么了?

答案1

一些背景:HMAC 身份验证是一项附加安全功能。即使在握手发生之前,客户端也必须使用预共享密钥对请求进行签名。如果请求不带有有效的 HMAC 签名,服务器将忽略该请求。对于 UDP,这相当于防火墙阻止来自该客户端的流量。

就我而言,与另一个客户端进行比较后,新系统上的配置文件似乎缺少该行

auth SHA256

从 Linux 桌面盒导出的文件中缺少此内容,但 Android 客户端的配置显示了它。添加此选项后,握手起作用(直到我遇到另一个不相关的错误)。

结论:如果没有auth,OpenVPN 要么不使用 HMAC 身份验证,要么回退到默认的哈希算法(我还没弄清楚是哪种情况)。无论哪种方式,这很可能会导致 HMAC 不匹配,从而导致服务器丢弃客户端请求。

我已经提交了一份功能要求tls-auth当指定但未指定时,项目会发出警告auth

相关内容