设置:
Centos 服务器上的 OpenVPN 2.3。多个客户端(windows、osx、linux)。使用每个设备的证书(easy-rsa)进行加密,并使用 openvpn-plugin-auth-pam.so 模块(用户名/密码)添加身份验证。我还使用密码保护私钥。
问题:
任何使用有效证书连接的人都可以与任何本地用户进行身份验证。 问题是,某些客户端最终可能会使用非常弱的密码,容易受到暴力攻击。 我知道我可以简单地限制客户端用户,以保护自己免受此类入侵,但我宁愿不局限于此
我想要的是:
我希望每个本地用户都能关联/相关到特定证书。这样,如果 Bob 的凭证被泄露,而另一个用户 Alice 的密码非常弱,那么使用 Bob 凭证的攻击者就无法通过用户 Alice 进行暴力破解。
如何才能做到这一点?
我完全意识到这是“偏执的”安全,但我认为这是应该提供的功能。当然,如果将证书与本地用户关联不是最佳和最有效的方式,那么请随意提出可以实现相同目标的替代方案(即特定证书的持有者只能针对特定本地用户进行身份验证)。
谢谢。
答案1
使用client-connect
脚本。除其他事项外,它还提供了用户名和证书链数据(因此它知道客户端证书通用名称)。您可以维护用户名和通用名称之间的对应关系(例如,您可能要求 CN 等于用户名,但这可能需要重新颁发所有证书)。如果出现不匹配的情况,脚本可以使用此对应关系拒绝连接。
答案2
为了控制整个堆栈,您需要为其中一个启动一个 openvpn 守护进程,为每个用户创建一个证书并为每个人使用特定的端口,然后您需要重新分发 pem 和 cfg 文件。
但是对于企业解决方案来说,最好使用链接到 WindowsAD 和预共享密钥的 l2ipsec,这是最佳选择,因此您将拥有一个 sso 密码解决方案,并且无需维护客户端软件,而只需通过分发带有一些屏幕截图的 Pdf 进行配置:-)希望有帮助!