我正在尝试使用 Novell (Novell.Directory.Ldap) 发布的库。版本 2.1.10。
到目前为止我所做的:
我测试了与应用程序(LdapBrowser)的连接并且它正在工作,所以它不是通信问题。
它是在 Mono 中编译的,但我正在使用 Visual Studio。所以用源创建了一个项目。我还引用了 Mono.Security,因为项目依赖于它。
我在捕获部分连接的错误中注释了一个调用 (freeWriteSemaphore(semId); ),因为它引发了更多异常。我检查了那个调用做了什么,它只是一个错误跟踪机制。
我遵循了 Novell ( http://www.novell.com/coolsolutions/feature/11204.html ) 文档中提供的基本步骤。
// 创建一个 LdapConnection 实例
LdapConnection ldapConn=新的 LdapConnection(); ldapConn.SecureSocketLayer = ldapPort == 636;
//Connect函数将创建一个到服务器的套接字连接
ldapConn.Connect(ldapHost,ldapPort);
//Bind函数将用户对象Credentials绑定到服务器
ldapConn.Bind(userDN,userPasswd);
现在它在 Bind() 函数处崩溃。我收到错误 91。
那么,有没有人使用过这个库并看到它有效?如果是这样,你做了什么让它工作,是否需要一些特殊的配置?有没有办法让它在没有 Mono 的 .NET 环境中工作(我可以引用 Mono dll,但我不希望它安装在服务器上)?
(更新)连接在端口 636 上,因此使用 SSL。我检查了 WireShark 的通信,并与我从 LDAP 浏览器获得的信息进行了比较。我已经看到传输 SSL 证书的步骤不是由 LDAP 库完成的。那么,让它做它应该做的最好的方法是什么?
(更新)我检查了文档,它表明它不支持 SSL。http://www.novell.com/coolsolutions/feature/11204.html
使用 LdapConnection.Bind() 对 LDAP 服务器进行身份验证。我们仅支持明文身份验证。SSL/TLS 支持尚未添加。
但是文档的日期是 2004 年,从那时起,已经进行了许多更新。并且库中有一个参数来定义连接是否使用 SSL。所以现在我很困惑。
(更新)找到了更新的文档: http: //developer.novell.com/documentation//ldapcsharp/index.html ?page=/documentation//ldapcsharp/cnet/data/bqwa5p0.html 。建立 SSL 连接的方式是在服务器上注册证书。问题是我所做的没有绑定到特定的 Novell 服务器,因此必须动态获取证书。