我一直在试图获得SSL连接到LDAPS服务器(Active Directory)工作,但仍然有问题。 我试着用这个:
openssl s_client -connect the.server.edu:3269
结果如下:
verify error:num=20:unable to get local issuer certificate
我想,好吧,好的服务器是几年前的一个旧的生产服务器。 也许CA不存在。 然后我把输出中的证书放到一个pem文件中,然后试着:
openssl s_client -CAfile mycert.pem -connect the.server.edu:3269
而这也没有工作。
我错过了什么? 不应该一直工作?
这个错误是openssl的说法,“我不能遵循证书链到受信任的根”。 我只是对我自己的AD服务器做了同样的命令,我得到了一个完整的证书链,但是最高级的证书有这个确切的错误。 如果您拥有签署证书的CA的pub-key,则可以使用-CAfile或-CApath选项指定它
所以这就是我所看到的CA证书名称:
depth=1 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at //www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA - G3 verify error:num=20:unable to get local issuer certificate verify return:0
这是我在上面第二次尝试完成-showcerts之后所导入的证书的名称。 我通过这样做在密钥库中列出了证书:
$JAVA_HOME/bin/keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts
我在那里看到CA证书。
Alias name: versign2006 Creation date: Jan 21, 2011 Entry type: trustedCertEntry Owner: CN=VeriSign Class 3 International Server CA - G3, OU=Terms of use at www.verisign.com/rpa (c)10, OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US Serial number: 641be820ce020813f32d4d2d95d67e67 Valid from: Sun Feb 07 19:00:00 EST 2010 until: Fri Feb 07 18:59:59 EST 2020 Certificate fingerprints: MD5: BA:B0:65:B4:3B:9C:E8:40:30:21:7D:C5:C6:CD:3F:EB SHA1: B1:8D:9D:19:56:69:BA:0F:78:29:51:75:66:C2:5F:42:2A:27:71:04
为了确保openssl使用我在服务器上使用的密钥库,我使用-CAfile参数:
openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts
知道CA的Java密钥库有密码,我尝试使用-pass pass:密码选项,如下所示:
openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts -pass pass:changeit
但是这也不起作用。
有趣的是,cacerts文件有一个密码,openssl不抱怨它不能读取cacerts文件。 这对我来说似乎很腥。 那个还是别的什么都响了?
我一直在试图获得SSL连接到LDAPS服务器(Active Directory)工作,但仍然有问题。 我试着用这个:
如果您使用OpenLDAP,则可以设置:
TLS_REQCERT=never
在你的openldap.conf文件中,它指示OpenLDAP不要尝试证书validation。 如果您使用Apache进行LDAP身份validation,也有类似的选项。
如果您确实想要执行证书validation,以下可能会有所帮助:
我错过了什么? 不应该一直工作?
我不这么认为。 虽然以下内容听起来可能是确切的,但它确实是我最好的客人:
你所尝试的只能用于自签名证书。 因为证书实际上是由Windows CA颁发的,所以尝试使用服务器证书作为-CAfile的参数不会给你任何东西。
通过与-showcerts选项做同样的事情获得了CA证书,抓住了另一个证书。 这应该是CA证书,对吗?
不一定,不。 无法保证远程服务器在其输出中显示CA证书。 您需要先查看服务器证书的颁发者:
openssl x509 -in server.crt -noout -text | grep Issuer
…然后看看您是否有其他证书与发行人相匹配。