内容目录
OpenVPN基于用户密码认证
为何需要用户密码
我们目前使用密钥进行加密传输,可以说已经很安全了,为什么还需要用户名密码呢
- 首先管理这些密钥和证书比较麻烦,如果用户比较多,单独为每个用户都创建一套密钥比较麻烦
- 其次多人使用同一密钥又不具有唯一性,比如说有用户不在需要VPN的时候,我们就需要吊销证书,如果多人使用一个密钥的情况下,吊销证书会造成其他用户也无法正常登录
所有就需要密钥加用户名密码,这样就可以实现多个用户使用同一个证书,使用不同的用户名和密码;当有新用户加入时,只需要添加一个用户名和密码即可,如果不需要使用,则删除用户名和密码即可
OpenVPN服务端配置
修改服务端配置
# 添加以下三号代码,使其服务端支持密码认证方式
vim /etc/openvpn/server.conf
script-security 3 #允许使用自定义脚本
auth-user-pass-verify /etc/openvpn/check.sh via-env #自定义脚本路径
username-as-common-name #用户密码登录方式验证
#表示只使用用户名密码方式验证,注释掉,则代表用户名密码、证书多重验证登录
#client-cert-not-required
创建自定义脚本
cat check.sh
#!/bin/bash
# 用户列表
PASSFILE="/etc/openvpn/openvpnfile"
# 用户登录情况的日志
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
echo "${TIME_STAMP}: User does not exist: username=\"${username}\",password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
为脚本增加执行权限
chmod +x /etc/openvpn/check.sh
创建用户密码文件
cat openvpnfile
xxx xxx # 前面是用户名,后面是密码
重启openvpn服务
systemctl restart openvpn@server
OpenVPN客户端配置
修改windows客户端配置文件
client.ovpn
文件
auth-user-pass
#用户密码认证
windows客户端重新登录
安卓手机端配置
Type
选择
User/PW + Certificates
留言