我正在尝试使用Windows LDAP C-API通过SSL连接到LDAP目录。当客户端计算机上的事件日志包含此错误时,此错误代码为0x51 = LDAP_SERVER_DOWN: “从远程服务器收到的证书不包含预期的名称。因此无法确定我们是否连接到正确的服务器。我们期待的服务器名称是eim-tsi2.sam.develop.beta.ads。 SSL连接请求失败。附加的数据包含服务器证书。“
这是不可能的,因为“Ldap Admin”能够通过SSL和端口636进行连接。
LDAP目录是Oracle DSEE,它在相应的证书库中具有CA和服务器证书。 客户端在“受信任的根证书颁发机构”中安装了CA,并在“本地计算机”物理存储中安装了CA.我认为这是CA的正确位置,因为我的小客户端程序使用Windows LDAP C-API; LDAP管理员确实希望CA在那里。
以下是我的程序的摘录,省略了错误处理和其他明显的源代码:
ld = ldap_sslinit(host, LDAP_SSL_PORT, 1);
// Set options: LDAP version, timeout ...
rc = ldap_set_option(ld, LDAP_OPT_SSL, LDAP_OPT_ON);
// Now connect:
rc = ldap_connect(ld, NULL);
结果: 0x51 = LDAP_SERVER_DOWN
无SSL连接成功,因此通常可以访问LDAP服务器。
由于Ldap Admin能够通过SSL进行连接,因此我认为证书是有效且位于正确的位置。但很明显,LDAP API期望它们在其他地方,并且无法从服务器获取服务器证书。我按照此处所述配置了证书:https://msdn.microsoft.com/en-us/library/aa366105%28v=vs.85%29.aspx
我做错了什么?
答案 0 :(得分:0)
有时它会更有助于更仔细地阅读错误消息。由SSL绑定失败导致的事件查看器中的条目是“我们期望的服务器名称是eim-tsi2.sam.develop.beta.ads。”
我应该注意到这个名字应该是eim-tsi2.cgn.de。(等等)。所以域名部分是错误的。
这是Schannel中的一个错误,可以通过注册表中的条目来解决,如下所述:https://support.microsoft.com/en-us/kb/2275950。
我仍然不知道为什么LDAPAdmin能够在没有其他注册表项的情况下进行连接,尽管它也使用WINLDAP API,因此应该遇到同样的错误。但这不再重要。
谢谢,安德鲁,谢谢你。