Openvpn
儘管已配置 OpenVPN HMAC 身份驗證失敗
我正在嘗試設置一個新設備來連接到我的 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
。