OpenVPN 证书或 plugin-auth-pam 身份验证

And*_*rei 7 openvpn authentication

配置 OpenVPN 服务器,我可以使用openvpn-plugin-auth-pam插件启用基于证书的身份验证或用户名/密码身份验证,但不能同时启用。

我启用用户名/密码身份验证如下:

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
client-cert-not-required
username-as-common-name
Run Code Online (Sandbox Code Playgroud)

但是,一旦我添加了以下几行,我为证书身份验证配置的客户端就会停止使用日志中的以下消息:

TLS Error: Auth Username/Password was not provided by peer        
TLS Error: TLS handshake failed                                   
Run Code Online (Sandbox Code Playgroud)

有什么方法可以不要求使用证书身份验证的客户端的用户名/密码?

小智 1

OpenVPN 不支持多种并发身份验证方法。正如评论中提到的,最好的解决方案是运行两个 OpenVPN 实例。在同一个盒子上运行它会更复杂,但绝对是可行的。

但是,似乎确实有一些可能适合您的情况的解决方法。

如果您知道哪些证书需要密码,哪些不需要密码,那么答案是肯定的。在服务器端使用“auth-user-pass-verify”脚本首先验证证书 DN(如果您也设置了 --username-as-common-name 那么您将自动知道验证脚本中的证书通用名)。如果您知道已输入密码的证书,则使用 pam 验证用户名/密码。如果您知道证书不包含密码,则让脚本返回“0”以允许访问。

请注意,无法自动确定用户是否输入了证书密码 - 这在 openssl 握手之外,因此 OpenVPN 服务器不知道。

来源:https ://openvpn.net/archive/openvpn-users/2007-12/msg00179.html

您还可以将 OpenVPN 生成的密钥对联合到本地 LDAP 服务器中,并使用上述脚本通过提供的证书对 LDAP 进行身份验证,或者在没有提供证书的情况下使用提供的凭据。