我想为 OpenVPN 创建自定义证书,不使用用户名和密码身份验证选项,而是直接将身份验证凭据放在客户端证书中。这将用于跨多个节点的更灵活的身份验证系统,而无需在每个节点上本地创建客户端证书。
基本上,客户端证书将保持不变,除了证书本身内部有一个令牌,以及客户端连接到节点时的情况。节点将使用令牌对客户端进行身份验证。不使用用户名和密码实现此目的的最佳方法是什么。
谢谢。
答案1
这涵盖OpenVPN 手册。
为每个用户创建一个凭证文件,这是一个只有两行的文本文件:
username
password
行分隔符必须是CR
或CRLF
(例如标准 Unix 或 Windows 分隔符)。我们将此文件称为vpn.auth
。
然后,在客户端配置中添加以下行:
...
auth-user-pass vpn.auth
...
如果auth-user-pass
已经存在,则需要向其添加一个参数——包含用户名和密码的文件名。
为了实现此功能,您的 OpenVPN 必须使用 ENABLE_PASSWORD_SAVE 定义进行编译(通常都是这样)。OpenVPN 3.x(仅限客户端的 OpenVPN 版本)也不支持此功能,因此不要使用该版本;请使用 OpenVPN 社区版 2.5 或更高版本。
依靠此作为唯一的身份验证机制本质上是不安全的。这应该只作为额外的机制。它并非旨在用个人证书和私钥取代主要的基于非对称加密的身份验证机制,而是要增强它。在规划 OpenVPN 时,您必须理所当然地认为它使用个人密钥和证书,并实施 VPN 用户管理,以便它执行所有必要的密钥生成和签名。如果您已经有一些脚本,您必须更新它们以包括每个人的密钥生成!