![尝试连接到 LDAPS(Windows 活动目录),但不断收到验证返回代码:20(无法获取本地颁发者证书)错误](https://linux22.com/image/725240/%E5%B0%9D%E8%AF%95%E8%BF%9E%E6%8E%A5%E5%88%B0%20LDAPS%EF%BC%88Windows%20%E6%B4%BB%E5%8A%A8%E7%9B%AE%E5%BD%95%EF%BC%89%EF%BC%8C%E4%BD%86%E4%B8%8D%E6%96%AD%E6%94%B6%E5%88%B0%E9%AA%8C%E8%AF%81%E8%BF%94%E5%9B%9E%E4%BB%A3%E7%A0%81%EF%BC%9A20%EF%BC%88%E6%97%A0%E6%B3%95%E8%8E%B7%E5%8F%96%E6%9C%AC%E5%9C%B0%E9%A2%81%E5%8F%91%E8%80%85%E8%AF%81%E4%B9%A6%EF%BC%89%E9%94%99%E8%AF%AF.png)
运行我们 Active Directory 服务器的人已为我提供了证书,因此我可以使用 LDAPS,但我无法使其正常工作。使用 openssl 验证时:
openssl s_client -connect domain.com:636 -CAfile ~/filename.pem
Verify return code: 20 (unable to get local issuer certificate)
我每次都这样。
我想知道服务器是否配置错误,因为我曾尝试像这样直接从服务器获取证书(从 Ubuntu 16.04 客户端):
openssl s_client -host domain.com -port 636 -prexit -showcerts
即使这样,我仍然收到同样的错误消息。
如果我输入:
openssl s_client -host google.com -port 443 -prexit -showcerts
我明白了Verify return code: 0 (ok)
我尝试将证书复制到/etc/ssl/certs
。我尝试使用-CApath
和-CAfile
将各种证书提供给服务器。
实际上,我想问的是,响应 openssl 的错误代码 20 是否-showcerts
意味着服务器确实配置错误,或者我做得不正确,因为当服务器行为异常时,我不想在客户端上花费更多时间。
openssl x509 -noout -text -in filename.pem
返回(有一些删节):
证书:
Data:
Version: 3 (0x2)
Serial Number:
xxxxxxxxxxxxxxxx
Signature Algorithm: sha1WithRSAEncryption
Issuer: CN=My organisation RootCA
Validity
Not Before: May 20 13:11:34 2016 GMT
Not After : May 20 13:21:34 2021 GMT
Subject: DC=org, DC=example, CN=My organisation Issuing CA
然后一堆东西看起来都很好。这就是根证书,不是吗?毕竟上面写着 RootCA。
哦,是的,如果我把那张证书输入进去,
openssl s_client -connect domain.com:636 -CAfile file.pem
我确实收到了不同的错误消息:
验证返回代码:2(无法获取颁发者证书)
所以感觉就像我有一个证书,但没有另一个。
我确实使用了另一个nmap --script ssl-cert
,但似乎除了错误代码 20 之外没有得到任何其他信息。
答案1
我假设您已收到一个包含单根 CA 证书的文件,用于验证 TLS 服务器证书。请确保它是 ASCII 封装的 base64 编码(又名 PEM)。
通常,证书颁发机构不会使用根 CA 的密钥直接签署 TLS 服务器公钥。出于安全原因,人们会使用中间 CA(通常也称为颁发 CA)来执行此操作。
现在 TLS 客户端必须验证整个 CA 证书链,并且需要访问中间 CA 证书和根 CA 证书。
如果 TLS 服务器配置良好,则只需要本地文件中的根 CA 证书,因为服务器在 TLS 连接期间会发送中间 CA 证书。但有些 TLS 服务器配置不佳。
你应该看看发生了什么
openssl s_client -connect ldap.example.com:636 -showcerts
就像你已经做的那样。
如果您没有根 CA 证书,请询问向您提供中级 CA 证书的人。
或者,如果您在此 AD 域中有一个 Windows 工作站,则很可能在 Windows 安装的信任库中找到根 CA 证书。
答案2
这就是根证书,不是吗?毕竟上面写着 RootCA。
Issuer: CN=My organisation RootCA
Validity
Not Before: May 20 13:11:34 2016 GMT
Not After : May 20 13:21:34 2021 GMT
Subject: DC=org, DC=example, CN=My organisation Issuing CA
不,这不是根证书,它只是由根证书签名的。您需要一个如下所示的证书:
Issuer: CN=My organisation RootCA
Subject: CN=My organisation RootCA
换句话说,发行者和主体都必须是您的 RootCA。
由于它可能是在 Windows 机器上创建的,请转到证书管理器并导出根 CA(仅证书,不需要密钥)。