除非用-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) 。 我做的另一个testing是运行命令-CApath /etc/ssl/certs/ ,在这种情况下,我仍然会得到错误20

由于OPENSSLDIR是/ usr / lib / ssl我已经设法将其链接到/ etc / ssl / certs,现在在文件系统中,该目录看起来像这样:

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

我不知道我缺less什么以及如何设置openssl必须查找证书的目录。 有人有类似的问题?

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

如果CApath不是NULL,则它指向包含PEM格式的CA证书的目录。 每个文件都包含一个CA证书 。 这些文件由CA主题名称哈希值查找,因此必须可用。 如果存在多个具有相同名称散列值的CA证书,则扩展名必须不同(例如9d66eef0.0,9d66eef0.1等)。 无论证书的其他属性如何,都按照分机号码的顺序执行search。 使用c_rehash实用程序来创build必要的链接

如果我没有错,可以使用一个目录作为CApath,如果:

  • 它包含在每个文件中包含权限的pem格式的文件。
  • 你运行c_rehash(或手动创build相应的符号链接)。