configurationOpenVPN服务器,我可以使用openvpn-plugin-auth-pam插件启用基于证书的authentication或用户名/密码authentication,但不能同时启用。
我启用用户名/密码authentication如下:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so login client-cert-not-required username-as-common-name
但是,一旦我添加下面的行,configuration证书身份validation的客户端将停止在日志中使用以下消息:
TLS Error: Auth Username/Password was not provided by peer TLS Error: TLS handshake failed
有没有办法不要求使用证书authentication的客户端的用户名/密码?
OpenVPN不支持多个并发的身份validation方法。 正如在评论中提到的,最好的解决scheme是运行两个OpenVPN实例。 在同一个盒子上运行它比较复杂,但肯定是可以的。
但是,似乎有一些解决方法可能适合您的情况。
如果你知道哪些证书需要密码,哪些不需要,那么答案是肯定的。 在服务器端使用'auth-user-pass-verify'脚本首先validation证书DN(如果你设置了–username-as-common-name,那么你将会在validation脚本中自动知道证书的公用名)。 如果它是一个您知道已input密码的证书,则使用pamvalidation用户名/密码。 如果你知道证书没有包含密码,那么让脚本返回'0'来允许访问。
请注意,无法自动确定用户是否键入了证书密码 – 这是openssl握手之外的,因此OpenVPN服务器不知道。
资料来源: https : //openvpn.net/archive/openvpn-users/2007-12/msg00179.html
您也可以将您的OpenVPN生成的密钥对联合到本地LDAP服务器中,并使用上述脚本使用提供的证书对LDAP进行身份validation,或者使用提供的证书,因为没有证书。