除非使用 -CAfile 指定,否则 openssl 找不到证书

除非使用 -CAfile 指定,否则 openssl 找不到证书

我已经有几天一直在努力解决 openssl 问题。

我已经在 ARM 设备上编译了 openssl,但运行时openssl s_client -connect google.com:443连接会失败error 20: unable to get local issuer certificate

如果我运行该命令并指定-CAfile /etc/ssl/certs/ca-certificates.crt连接将起作用并返回verify return code: 0 (ok)。我进行的另一项测试是使用运行该命令-CApath /etc/ssl/certs/,在这种情况下我仍然会得到错误 20

由于 OPENSSLDIR 是 /usr/lib/ssl,我已设法将其链接到 /etc/ssl/certs,现在在文件系统中该目录如下所示:

ls -l /usr/lib/ssl
certs -> /etc/ssl/certs

我不知道我遗漏了什么,以及如何设置 openssl 必须查找证书的目录。有人遇到过类似的问题吗?

答案1

CApath 中指定的目录必须具有特殊的结构。从OpenSSL 文档

如果 CApath 不为 NULL,则指向包含 PEM 格式的 CA 证书的目录。文件每个都包含一个 CA 证书。文件通过 CA 主题名称哈希值进行查找,因此该哈希值必须可用。如果存在多个具有相同名称哈希值的 CA 证书,则扩展名必须不同(例如 9d66eef0.0、9d66eef0.1 等)。搜索按扩展名号的顺序进行,与证书的其他属性无关。使用 c_rehash 实用程序创建必要的链接

如果我没错的话,您可以使用目录作为 CApath,如果:

  • 它包含 pem 格式的文件,每个文件都包含一个权限。
  • 您在其中运行 c_rehash(或手动创建适当的符号链接)。

相关内容