openssl 无效的 CA 证书

Mic*_*art 8 openvpn openssl

我正在使用 PKI 基础设施设置服务器到服务器 OpenVPN,但无法使其工作。我怀疑它是证书链中的东西,但我不知道如何解释。我有一个离线根 CA 和一个证书层次结构。CA 由称为 EJBCA 的产品在外部进行管理。从图片上看,链条看起来像这样(名称已更改):

RootCA -> OnlineSubCA -> SubCA1 -> VPNCA
Run Code Online (Sandbox Code Playgroud)

我使用 CA VPNCA 签署了服务器和客户端证书,并在这些系统上拥有证书链。在调试 OpenVPN 时,我尝试使用“openssl s_server”和 s_client”,这让我相信这是 CA 链。特别是在服务器上:

openssl s_server -cert server.cert -key server.key -CAfile chained.pem -verify 5
Run Code Online (Sandbox Code Playgroud)

并在客户端

openssl s_client -cert client.cert -key client.key -CAfile chained.pem -verify 5
Run Code Online (Sandbox Code Playgroud)

服务器回吐,除其他外:

depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=24:invalid CA certificate
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify error:num=26:unsupported certificate purpose
verify return:1
depth=4 C = CA, O = My Company, CN = RootCA, emailAddress = certs@mycompany.com
verify return:1
depth=3 C = CA, O = My Company, CN = OnlineSubCA
verify return:1
depth=2 CN = SubCA1, O = My Company, C = CA
verify return:1
depth=1 CN = VPNCA
verify return:1
depth=0 C = CA, ST = , L = , O = My Company, OU = , CN = client1.mycompany.com, emailAddress = pki@mycompany.com
verify return:1
Run Code Online (Sandbox Code Playgroud)

我完全无法解释如何或为什么会这样。OpenVPN 也因类似的错误而失败,来自客户端:

VERIFY ERROR: depth=3, error=invalid CA certificate: /C=CA/O=My_Company/CN=OnlineSubCA
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 12.04 上运行 OpenVPN 2.2.1 和 OpenSSL 1.0.1。两者的时间是同步的。

我不知道如何进一步进行。任何想法/建议将不胜感激。

And*_*w B 18

这是 X509v3 扩展的问题。现代证书的签名方式表明该类型证书的批准用途。这些可以通过将证书通过管道openssl x509 -text传输到-in.

在您的情况下,这些错误消息表明您指定的证书不是 CA 证书。(最大的提示是“不支持的证书用途”) 使用上面的命令,显示证书的文本信息。有效的 CA 证书将如下所示:

        X509v3 Basic Constraints:
            CA:TRUE
Run Code Online (Sandbox Code Playgroud)

非 CA 证书将改为显示:

        X509v3 Basic Constraints:
            CA:FALSE
Run Code Online (Sandbox Code Playgroud)

您可能已经将文件弄得乱七八糟,移动文件时这是一件相当容易的事情。openssl x509将放大镜显示实际证书的内容。

  • 此外,如果您将“关键”作为基本约束,但您的证书未被合法机构之一签名/信任,您将获得 26/unspupported 证书目的(尝试使用自签名根 CA) (8认同)