软件指南针:专注于软件传播与分享

使用其他身份验证方法 (OpenVPN官方文档)

来源:原创 1637次浏览 0条评论
☞ 本文主要介绍软件OpenVPN的相关内容:使用其他身份验证方法 (OpenVPN官方文档)

   其下列版本/分支可以参考本文:

  • 全部版本/分支
英文原文:http://openvpn.net/index.php/open-source/documentation/howto.html#auth

使用其他身份验证方法

OpenVPN 2.0及以上版本支持OpenVPN服务器安全地从客户端获取用户名和密码,并以该信息作为客户端身份验证的基础。

为了使用该身份验证方法,请先在客户端配置中添加auth-user-pass指令。这使得OpenVPN客户端直接向用户询问用户名/密码,并通过安全的TLS隧道将其传递到服务器。

下一步,配置服务器以使用一个身份验证插件,该插件可以是一个脚本、共享的对象或者DLL文件。在每次客户端尝试连接时,OpenVPN服务器就会调用该插件,并将客户端输入的用户名/密码传递给它。身份验证插件通过返回一个表示失败(1)或成功(0)的值,从而控制OpenVPN是否允许该客户端连接。

使用脚本插件

通过在服务器端配置文件中添加auth-user-pass-verify指令,我们额可以使用脚本插件。例如:

auth-user-pass-verify auth-pam.pl via-file
我们将使用名为auth-pam.pl的perl脚本来验证正在连接的客户端的用户名/密码。详情请查看手册页面中关于auth-user-pass-verify的相关描述。

auth-pam.pl脚本文件位于OpenVPN源代码发行版的sample-scripts子目录中。在Linux服务器上,它将使用PAM认证模块对用户进行身份验证,从而实现shadow密码、RADIUS(远程用户拨入验证服务)或者LDAP(轻量级目录访问协议)验证。 auth-pam.pl主要用于演示目的。至于现实世界中的PAM认证,请使用下面描述的openvpn-auth-pam共享对象插件。

使用共享对象或DLL插件

共享对象或DLL插件通常是一个经过编译的C模块,它能够在运行时被OpenVPN服务器加载。例如,如果你正在Linux系统中使用基于RPM的OpenVPN,openvpn-auth-pam插件应该已经创建好了。为了使用该插件,请在服务器端配置文件中添加如下语句:

plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login

这将告诉OpenVPN服务器使用login PAM模块来校验客户端输入的用户名/密码。

对于现实世界生成环境中的使用,最好使用openvpn-auth-pam插件,因为相对使用auth-pam.pl脚本而言,它具有以下几个优点:

  • 共享对象openvpn-auth-pam插件采用更加安全的拆分权限执行模式。这意味着OpenVPN服务器可以运行在使用user nobodygroup nobodychroot等指令来降低权限的情况下,并且能够进行身份验证,而不依赖于只有root用户才能读取的shadow密码文件。
  • OpenVPN可以通过虚拟内存将用户名/密码传递给插件,而不是通过一个文件或环境变量,对于服务器计算机而言,这将具有更好的本地安全性。

如果你想了解关于开发自己的OpenVPN插件的更多信息,请查看OpenVPN源代码发行版plugin子目录中的README文件。

在Linux中,为了构建openvpn-auth-pam插件,请转到OpenVPN源代码发行版的plugin/auth-pam目录,并运行make

使用用户名/密码验证作为客户端验证的唯一形式

默认情况下,在服务器上使用auth-user-pass-verify或者用户名/密码验证插件将会启用双重身份验证,这使得待验证客户端的客户端证书和用户名/密码验证都必须通过。

我们也可以禁用客户端证书,而强制只使用用户名/密码验证,尽管从安全角度来说,不鼓励这样做。在服务器端:

client-cert-not-required
通常还需要这样设置:
username-as-common-name

这将告诉服务器优先使用用户名,就像它使用那些通过客户端证书认证的客户端的Common Name一样(也就是说,使用username作为Common Name,用法与之前使用Common Name时相同)。

注意,client-cert-not-required并不排除对服务器证书的需要,所以一个客户端连接到使用了client-cert-not-required指令的服务器,可以删除客户端配置文件中的certkey指令,但不能删除ca指令,因为它对于客户端验证服务器端证书来说是必需的。

作者:软件指南针(http://www.softown.cn),转载请保留出处!

用户评论

使用指南 故障排除 0 返回顶部