我有一个可以正常工作(直到现在)的 ubuntu openvpn 服务器。
我认为我的服务器使用了错误的 CA 来签署客户端 CRT。
例如:
我使用“source ./vars”后跟“./build-key john.doe”,一切正常(正常是指我得到了 john.doe 的 csr、crt 和 key)。
但是如果我用“openssl verify -CAfile ca.crt keys/john.doe.crt”测试 crt,我会得到以下结果:
keys/john.doe.crt:C = VE、ST = MI、L = 加拉加斯、O =www www、CN = john.doe、emailAddress =[电子邮件保护] 0 深度查找时出现错误 20:无法获取本地颁发者证书
测试任何正常工作的(及较旧的)客户端 crt,均不会引发任何错误...
我也尝试了这个命令:“openssl x509 -in keys/jhon.doe.crt -noout -text | grep Issuer”并抛出:
发行人:C=VE, ST=MI, L=Caracas, O=www www, CN=fred.durst/name=Fred Durst/[电子邮件保护]
这很奇怪,因为 Fred Durst 是客户,而不是 CA......
当我使用正在运行的客户端 crt 尝试执行相同的命令时,它会抛出:
发行人:C=VE、ST=MI、L=Caracas、O=www www、OU=Section、CN=SGBVPN/name=SGBVPN
在我看来这没什么问题...奇怪的是,Fred Durst 是所有这些问题出现之前最后创建的 crt... 在 fred.durst 之前创建的所有旧客户端 crt 都工作正常,问题只发生在新密钥上...
有什么线索吗?TIA
答案1
生成这些证书并没有确切的标准方法。根据脚本的内容,它可能要做几件事。不过,我要指出两点。
首先,您没有说连接不正常。我真的希望没有人能够使用这些证书进行身份验证;如果可以,则意味着任何用户都可以签署另一个任意证书请求并授予对您的 VPN 的访问权限。防止这种情况的方法是颁发明确不是 CA 证书的证书,并且仅设置必要的密钥使用属性。
无论如何,通常您将使用命令签署证书openssl ca
,该命令取决于openssl.conf
文件中的参数(通常在命令行中/etc/openssl.conf
或在命令行中指定)。检查其中的选项是否正确。找到它正在使用的 CA 证书和密钥,并确保它们正确(再次,这可以在 openssl 配置文件中或在命令行中)。
如果您不使用 openssl,则适用相同的通用解决方案 - 找到 CA 证书并确保它没有被意外替换。
如果您以某种方式设法覆盖了密钥(或其他人这样做了),您将必须找到备份副本或重建您的 PKI。
如果没有你的脚本内容,我就无法告诉你更多内容。