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

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

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

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

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login
client-cert-not-required
username-as-common-name

但是,一旦我添加以下行,配置证书认证的客户端就会停止工作,并在日志中显示以下消息:

TLS Error: Auth Username/Password was not provided by peer        
TLS Error: TLS handshake failed                                   

有没有什么方法可以不要求使用证书认证的客户端提供用户名/密码?

答案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 进行身份验证,或者在未提供证书的情况下使用提供的凭据。

相关内容