Openvpn

儘管已配置 OpenVPN HMAC 身份驗證失敗

  • March 5, 2022

我正在嘗試設置一個新設備來連接到我的 OpenVPN 伺服器。新設備是一個沒有 GUI 的 Linux 系統。我從桌面 Linux 系統導出了配置文件並進行了必要的更改。

桌面系統可以連接到 VPN。但是,新系統無法連接。日誌報告 TLS 握手超時。在伺服器上,我看到以下條目:

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

這表明客戶端尚未配置 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 密鑰在所有系統上都是相同的。怎麼了?

一些背景知識:HMAC 身份驗證是一項附加的安全功能。即使在握手發生之前,客戶端也必須使用預共享密鑰對請求進行簽名。如果請求不帶有有效的 HMAC 簽名,伺服器將忽略該請求。使用 UDP,這相當於防火牆阻止來自該客戶端的流量。

就我而言,在與另一個客戶端進行比較後,新系統上的配置文件似乎缺少該行

auth SHA256

從 Linux 桌面框導出的文件中缺少此內容,但 Android 客戶端的配置顯示了它。添加此選項後,握手工作(直到我遇到另一個不相關的錯誤)。

結論:沒有auth,OpenVPN 要麼不使用 HMAC 身份驗證,要麼回退到預設的雜湊算法(我還沒弄清楚是哪種情況)。無論哪種方式,這很可能會導致 HMAC 不匹配,從而導致伺服器丟棄客戶端請求。

我已向項目送出功能請求tls-auth,以便在指定但未指定時發出警告auth

引用自:https://unix.stackexchange.com/questions/692845