除非使用CApath或CAfile,否则无法验证CA证书

Nau*_*jpr 6 ubuntu openssl ldap

由于信任问题,我无法将OpenSSL连接到服务器.我已经放置了CA证书/etc/ssl/certs/并且已经运行,sudo c_rehash并且可以看到已经创建了正确的文件.我可以看到CA证书在ca-certificates.crt中.但是如果我跑:

openssl s_client -connect servername.domain.com:636
Run Code Online (Sandbox Code Playgroud)

该命令失败,验证返回码:21(无法验证第一个证书)

如果我做:

openssl s_client -connect servername.domain.com:636 -CApath /etc/ssl/certs/
Run Code Online (Sandbox Code Playgroud)

我得到验证返回码:0(ok)

我能做什么,所以我不必指定CApath?

我正在使用Ubuntu 13.04.

lm7*_*713 9

您还可以设置和导出环境变量SSL_CERT_FILE或SSL_CERT_DIR ...

export SSL_CERT_FILE=/path/to/ca_bundle.crt

export SSL_CERT_DIR=/path/to/ca/dir

然后,您不必在每个openssl命令中指定CAfile或CApath.


jww*_*jww 8

由于信任问题,OpenSSL连接到服务器.

与几乎所有人都信任的浏览器不同,OpenSSL默认不信任任何内容.

由您来决定应该信任什么.使用OpenSSL时必须指定一些内容s_client.

如果您使用OpenSSL API以编程方式工作,则可以使用更多选项.但这似乎与使用OpenSSL命令有关.


我能做什么,所以我不必指定CApath

你可以使用CAfile.它避免了重新散列,并为域的信任创建了1:1映射.也就是说,您只信任该域的一个发行者.如果任何其他发行人声称是发行人,您将不会信任发行人或服务器.

您可以看到如何从OpenSSL中提取所需的信息,s_clientCAfile如何在OpenSSL中获取SSL证书中使用.

当使用所有证书时CAPath,您信任任何发行人,即使它不是真正的发行人.这发生在过去和坏事.

最坏的情况是坏人妥协您信任的CA并为域发布虚假证书.这也发生在过去,而且很糟糕.

在上面的两个否定情况中,您可以放弃向DNS和CA授予信任,并使用证书或公钥锁定等安全多样化技术.如果您与站点之间存在预先存在的关系,那么您就知道服务器的预期公钥.在这种情况下,不需要信任CA.