由于信任问题,我无法将OpenSSL连接到服务器.我将CA证书放在/ etc / ssl / certs /上并运行了sudo c_rehash,并且可以看到已经生成了正确的文件.我可以看到CA证书在ca-certificates.crt中.但是如果我跑:
openssl s_client -connect servername.domain.com:636
该命令失败,验证返回码:21(无法验证第一个证书)
如果我做:
openssl s_client -connect servername.domain.com:636 -CApath /etc/ssl/certs/
我得到验证返回码:0(ok)
我能做什么,所以我不必指定CApath?
我正在使用Ubuntu 13.04.
OpenSSL connect to a server because of trust issues.
与几乎所有人都信任的浏览器不同,OpenSSL默认不信任任何内容.
由您决定应该信任什么.使用OpenSSL和s_client时,您必须指定一些内容.
如果您使用OpenSSL API以编程方式工作,则可以使用更多选项.但这似乎与使用OpenSSL命令有关.
What can I do so I don’t have to specify the
CApath
?
您可以使用CAfile.它避免了重新散列,并为域的信任创建了1:1映射.也就是说,您只信任该域的一个发行者.如果任何其他发行人声称是发行人,您将不会信任发行人或服务器.
您可以看到如何从OpenSSL的s_client中提取所需的信息,并在How to Grab SSL Certificate in OpenSSL处使用CAfile.
当使用CAPath中的所有证书时,您信任任何发行人,即使它不是真正的发行人.这发生在过去和坏事.
最坏的情况是坏人妥协您信任的CA并为域发布虚假证书.这也发生在过去,而且很糟糕.
在上面的两个否定情况中,您可以放弃向DNS和CA授予信任,并使用证书或公钥锁定等安全多样化技术.如果您和站点之间存在预先存在的关系,那么您就知道服务器的预期公钥.在这种情况下,不需要信任CA.