ch4 OpenVPN的统一身份认证方案及实现方法
OpenVPN 2.0与更高版本允许OpenVPN服务器从客户端安全地获取用户名和密码,并将该信息用作认证基础。 方法1:通过本地证书密钥认证。 默认不配置,openvpn即使用证书进行身份认证。 (1)编辑主服务器配置文件/etc/openldap/slapd.conf,取消如下行的注释: 方法2:本地文件认证 在使用身份验证时,需要将 auth-user-pass 指令添加到客户端配置文件中,设置后OpenVPN客户端向用户索要用户名/密码,并将其通过安全的TLS通道传递给服务器进行验证。 服务端配置文件需要增加配置指令 auth-user-pass-verify auth-pam.pl via-file 使用脚本插件。auth-pam.pl 在源码包 sample/sample-script 路径下。 text 1 plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login 生产环境下官方推荐使用 openvpn-auth-pam 插件进行验证,相比于 auth-pam.pl,openvpn-auth-pam 插件具有多个优点: openvpn-auth-pam 使用拆分权限执行模型来提高安全性。 C编译的插件比脚本运行速度更快。 OpenVPN可以通过虚拟内存(而不是通过文件或环境)将用户名/密码传递给插件,这对于服务器上的本地安全性更好。 获取openvpn-auth-pam插件 openvpn-auth-pam插件在openvpn代码目录src/plugins/auth-pam 下,运行 make && make install 进行安装,会自动复制到openvpn安装好的 lib/openvpn/plugins 目录下。 开启密码认证 默认情况下, 在服务器上使用 auth-user-pass-verify 或用户名/密码 插件 将启用双重身份验证,要求客户端证书和用户名/密码身份验证都必须成功,才能对客户端进行身份验证。可以选择关闭客户端证书认证。 text 1 2 client-cert-not-required username-as-common-name # 用户名作为通用名称 开启后需要在客户端注释 cert 和 key的配置 方法3:数据库认证 法2:利用的脚本程序(shell,php等)本地文件去读数据库。 法1:用pam_mysql 方法:4:ldap统一用户认证 openvpn-auth-ldap 利用第一个文件认证的思路,去LDAP查询,还可以和本地文件比较。如 ldap认证原理图 配置openvpn服务端通过ldap进行身份验证 配置OpenVPN基 LDAP的身份验证,需要安装用于LDAP身份验证的OpenVPN插件。openvpn-auth-ldap,它通过LDAP为OpenVPN实现身份认证。 CentOS中 openvpn-auth-ldap 插件在EPEL中 ubuntu与Centos都可以通过对应的包管理工具进行插件安装。...