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

Ubuntu Can';除非使用CApath或CAfile,否则无法验证CA证书,ubuntu,openssl,ldap,Ubuntu,Openssl,Ldap,由于信任问题,我无法让OpenSSL连接到服务器。我将CA证书放在/etc/ssl/certs/上,并运行了sudo c_rehash,可以看到已生成正确的文件。我可以在CA-certificates.crt中看到CA证书。但是,如果我运行: openssl s_client -connect servername.domain.com:636 命令失败,验证返回代码:21(无法验证第一个证书) 如果我这样做: openssl s_client -connect servername.doma

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

openssl s_client -connect servername.domain.com:636
命令失败,验证返回代码:21(无法验证第一个证书)

如果我这样做:

openssl s_client -connect servername.domain.com:636 -CApath /etc/ssl/certs/
我得到验证返回代码:0(确定)

我可以做什么,这样我就不必指定CApath了


我正在使用Ubuntu 13.04。

如果我正确理解了这个问题,您必须在您的域中分配证书

您可以(在apache上)在
/etc/httpd/vhost.d/servername.domain.com
(如果您使用vhost)

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

与浏览器不同,浏览器几乎信任任何人的任何东西,OpenSSL默认不信任任何东西

由你决定什么是值得信任的。在使用OpenSSL和
s\u客户端时,您必须指定一些内容

如果您正在以编程方式使用OpenSSL API,则有更多选项。但这似乎与使用OpenSSL命令有关


我可以做什么,这样我就不必指定
CApath

您可以使用
CAfile
。它避免了重复,并为域的信任创建了1:1映射。也就是说,您只信任一个问题域的颁发者。如果任何其他发卡机构声称是发卡机构,您将不信任该发卡机构或服务器

您可以查看如何从OpenSSL的
s_客户端
提取所需信息,并在中使用
CAfile

使用
CAPath
中的所有证书时,您信任任何颁发者,即使它不是真正的颁发者。这种情况在过去发生过,而且很糟糕

一个极端的例子是,一个坏人破坏了你信任的CA,并为这个域名颁发了虚假的证书。这在过去也发生过,而且很糟糕


在上述两种负面情况下,您可以放弃向DNS和CA授予信任,而使用安全多样化技术,如证书或公钥固定。如果您与站点之间存在预先存在的关系,则您知道服务器的预期公钥。在这种情况下,不需要信任CA。

您还可以设置并导出环境变量SSL\u CERT\u FILE或SSL\u CERT\u DIR

export SSL\u CERT\u FILE=/path/to/ca\u bundle.crt

export SSL\u CERT\u DIR=/path/to/ca/DIR


这样,您就不必在每个openssl命令中都指定CAfile或CApath。

谢谢您提供的信息!我开始发疯了。我认为有一种方法可以在不必指定路径或证书本身的情况下验证证书(如果我指定了路径或证书本身,则可以很好地进行验证)。现在,我必须弄清楚为什么我的应用程序(mediawiki)没有使用该证书绑定,即使我指定了路径和文件。请参阅下面的答案-使用导出应用程序可能会使用预期的文件/目录。指定CApath或CAfile会从默认位置额外加载CA证书,除非设置了SSL\u cert\u DIR。看你的答案实际上帮助解决了困扰我一段时间的网络问题。谢谢
SSLEngine On
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/httpd/ssl/yourcert.crt
SSLCertificateKeyFile /etc/httpd/ssl/yourcert.key
SSLCertificateChainFile /etc/httpd/ssl/yourcert.ca-bundle