我正在尝试使用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 = new LdapConnection(); ldapConn.SecureSocketLayer = ldapPort == 636;
// Connect函数将创建到服务器的套接字连接
ldapConn.Connect(ldapHost,ldapPort);
// Bind函数将用户对象凭据绑定到服务器
ldapConn.Bind(userDN,userPasswd);
现在它在Bind()函数处崩溃。我收到错误91。
那么,有人使用过这个库并看到它起作用了吗?如果是这样的话,你是如何使其工作的?是否需要一些特殊的配置?有没有办法在.NET环境中让它工作而不需要Mono(我可以引用Mono dlls,但我不想在服务器上安装它)?
(更新) 连接在端口636上,因此使用SSL。我用WireShark检查了通信并与LDAP Browser得到的结果进行了比较。我发现LDAP库没有执行SSL证书通信步骤。那么,最好的方法是让它做它应该做的事情是什么?
(更新)我查阅了文档,它指出它不支持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服务器,因此证书必须动态获取。