这是从 NetworkEngineering 移来的。
我用了本 DigitalOcean 指南(以下简称“指南”)几个月前设置了 OpenVPN 服务(v2.3.10,OpenSSL 1.0.2g)。它运行完美,而且比我们旧的 VPN 设备更快。现在我需要撤销证书。我按照指南中的第 14 步进行操作,然后在本页没有任何运气。
我向配置文件添加了crl-verify $SomeSuchDir/crl.pem
($SomeSuchDir
其中任何路径“/etc/openvpn”、“/root/openvpn-ca/keys”和 null(如指南中所述)),重新启动了服务,但所有证书都不起作用,无论是有效的还是被撤销的。启用该crl-verify crl.pem
选项后,我收到此错误
“TLS_ERROR:BIO 读取 tls_read_plaintext 错误:错误:14089086:SSL 例程:ssl3_get_client_certificate:证书验证失败”
当有效或已撤销的证书尝试连接时。当我注释掉该选项并重新启动服务时,我仍然可以使用明显已撤销的证书进行连接。“index.txt”文件中有一个“R”和已撤销证书的附加字段,当我运行revoke-full bad-cert
脚本时,我收到“错误 23”消息。
我查看了 revoke-full 脚本、vars 变量文件和 openssl-1.0.0.cnf 文件,看起来一切都正常。还有人在为 OpenVPN 生成 CRL 时遇到问题吗?
更新:
从 NetworkEngineering 移出后,我在日志文件中四处寻找并找到了CRL: cannot read CRL from file $SomeSuchDir/crl.pem
。该文件至少是所有人都可读的。我遇到了这个帖子,作者也遇到了类似的问题。他的解决方案是将运行 OpenVPN 服务的两行注释掉,将其作为 nobody:nogroup。虽然我的 crl.pem 文件是全局可读的,但祖先目录对于 nobody:nogroup 来说至少必须是“rx”。我的文件都在 /root 中,因此 nobody:nogroup 无法访问。
我创建了 /REV 并将 crl.pem 粘贴在其中,并将 nobody:nogroup 设为所有者。我将配置选项更改为crl-verify /REV/crl.pem
并重新启动服务。撤销的证书似乎被禁止,而有效的证书则被允许。
我又与另一个要撤销的证书进行了一轮连接。我这样做了./revoke-full cert-to-be-revoked
,得到了相应的“错误 23...”和“数据库已更新”消息,将 $KEY_DIR/crl.pem 复制到 /REV/,telnet 到管理界面,执行kill cert-to-be-revoked
,客户端无法重新连接。我用 验证了撤销的证书和相应的序列号是否在“撤销的证书:”中openssl crl -in crl.pem -text
。
所以现在的问题是,以 root:root 而不是 nobody:nogroup 身份运行 OpenVPN 服务是否安全?
答案1
我不会以 root:root 身份运行 openvpn,这将是一个重大的安全问题。
在 shell openvpn 中添加一个新用户,并把该用户组设为 openvpn,更改配置的所有权,并将证书设为 openvpn
chown -R openvpn:openvpn /etc/openvpn/*
假设您有自己的登录名,并且如果您希望能够更新配置或任何文件,您可以将您的登录名添加到组 openvpn,然后使用组权限来启用对您想要写入/读取的文件的访问。