我正在尝试使用 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 的正确位置,因为我的小客户端程序使用 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
我做错了什么?
最佳答案
有时它有助于更仔细地阅读错误消息。由于 SSL 绑定(bind)失败导致事件查看器中的条目是“我们期望的服务器名称是 eim-tsi2.sam.develop.beta.ads。”
我应该注意到名称应该是 eim-tsi2.cgn.de.(等),而不是。所以域名部分是错误的。
这是 Schannel 中的一个错误,可以通过注册表中的条目解决,如下所述:https://support.microsoft.com/en-us/kb/2275950 .
我仍然不知道为什么 LDAPAdmin 能够在没有附加注册表项的情况下进行连接,尽管它也使用 WINLDAP API,因此应该会遇到同样的错误。但这不再重要了。
谢谢安德鲁的帮助。
关于c - Windows LDAP API : No connection over SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37438566/