带SSL的LDAP的ISAPI筛选器只能用作pipe理员

我已经为IIS 6.0创build了一个ISAPI筛选器,该筛选器尝试使用LDAP对Active目录进行身份validation。 当通过端口389定期进行身份validation时,filter工作正常,但是当我尝试使用SSL时,在ldap_connect()调用时,我总是得到0x51 Server Down错误。 即使跳过连接调用并使用ldap_simple_bind_s()也会导致相同的错误。

奇怪的是,如果我将应用程序池标识更改为本地pipe理员帐户,则筛选器正常工作,LDAP over SSL成功。 我用下面的相同的代码创build了一个exe文件,并将其作为pipe理员运行在服务器上,并且工作正常。 使用网站的应用程序池的默认networking服务标识是什么似乎是问题。 有什么想法发生了什么? 我想使用默认身份,因为我不希望网站具有较高的pipe理员权限。

服务器位于我们的运行AD的networking和域之外的DMZ中。 我们在AD的DC上也有有效的证书。

码:

 // Initialize LDAP connection LDAP * ldap = ldap_sslinit(servers, LDAP_SSL_PORT, 1); ULONG version = LDAP_VERSION3; if (ldap == NULL) { strcpy(error_msg, ldap_err2string(LdapGetLastError())); valid_user = false; } else { // Set LDAP options ldap_set_option(ldap, LDAP_OPT_PROTOCOL_VERSION, (void *) &version); ldap_set_option(ldap, LDAP_OPT_SSL, LDAP_OPT_ON); // Make the connection ldap_response = ldap_connect(ldap, NULL); // <-- Error occurs here! // Bind and continue... } 

更新:我创build了一个没有pipe理员权限的新用户,并以新用户的身份运行testingexe文件,并得到了同样的Server Down错误。 我将用户添加到pipe理员组,并获得相同的错误。 似乎在此特定服务器上使用LDAP over SSL身份validation的唯一用户是pipe理员。

带有ISAPIfilter的Web服务器(以及我一直在运行testingexe的地方)正在运行Windows Server 2003.其上装有AD的DC正在运行2008 R2。

另外值得一提的是,我们在同一台服务器上使用PHP(OpenLDAP)通过SSL对LDAP进行身份validation,并且在那里没有任何问题。 我有一个ldap.conf文件,指定TLS_REQCERT never ,运行PHP代码的用户是IUSR。

确保失败的用户信任您的LDAP服务器的证书颁发机构。

要做到这一点,请以失败的用户身份login(可能必须授予临时权限,可能将其放入“远程桌面”组)。 启动certmgr.msc并在“受信任的根证书颁发机构”下查找您正在使用的证书颁发机构。

将您看到的内容与pipe理员帐户中的内容进行比较。

我相信你有一个信任商店的问题。

请参阅http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sag_cmuncertstor.mspx?mfr=true

testing这种方法的一个示例方法可能是区分打印证书存储内容的基于文本的输出。