SSL 根 CA 证书无法识别,但存在于信任库中。为什么?

Rei*_*ert 6 linux certificate ssl

背景:

  • aws.amazon.com/ec2 上的 Ubuntu Server 14.10 64 位
  • 来自 COMODO 的廉价 PositiveSSL 服务器证书
  • 1 个服务器证书、2 个中间 CA 证书和 1 个根 CA 证书作为 COMODO 的 ZIP 存档
  • Citadel 的 WebCit httpsd

问题:

连接的证书链似乎是正确的,但验证失败。

openssl s_client myhost:port
Run Code Online (Sandbox Code Playgroud)

显示证书链和颁发者-主体对通过链正确排列,但是:

verify error:num=19:self signed certificate in certificate chain
Run Code Online (Sandbox Code Playgroud)

openssl 不接受根 CA 证书,尽管默认情况下可以在 Ubuntu 服务器信任库中找到它。

具体来说: AddTrustExternalCARoot.crt从 COMODO 收到的每封电子邮件以及 /etc/ssl/certs/AddTrust_External_Root.pem哪些链接 /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt 是相同的。

这里有什么问题?

dav*_*085 4

OpenSSL 至少到当前(1.0.2a)有一个错误,即s_client使用 NO-CA{path,file}参数实际上并没有按应有的方式使用默认信任库,因此无法根据该信任库验证有效的证书。(还有s_servers_time,但很少关心这些验证。)请参阅https://serverfault.com/questions/607233/how-to-make-openssl-s-client-using-default-ca。开发人员已宣布修复,但可能需要一些时间才能发布和分发。与此同时,您需要明确指定-CA*参数。请注意,openssl verify没有此错误,因此正确地将证书/链报告为有效。

2015/08/26更新修复已于2015/06/12 在 1.0.1o 和 1.0.2c 中发布。另外,在调查其他事情时,我发现RedHat 软件包可能没问题。更具体地说,据我了解,CentOS 源 RPMopenssl-1.0.1e-30.el6.11是 RedHat 源 RPM 的副本(但无法轻易确认),其中包含openssl-1.0.1c-default-paths.patch对 2012 年 12 月 06 日的更改s_client.c s_server.c s_time.c,这些更改看起来与 2015 年等效(尽管在文本上不相同) /06/12 上游修复。假设这个补丁应用在 RedHat 和 CentOS 软件包中(我无法轻易返回并检查),它们将按预期工作。