安全LDAP认证问题

本文关键字:问题 认证 LDAP 安全 | 更新日期: 2023-09-27 18:05:50

我在ASP中部署的web表单后面的代码中使用以下c#代码。. NET 4(4.0.30319)在Server1和Server2上的应用程序池。

PrincipalContext pc = new PrincipalContext(ContextType.Domain, "testnet.testad.org:636", "dc=testnet,dc=testad,dc=org");
bool validated = pc.ValidateCredentials(username, password, ContextOptions.Negotiate);

Server1正在运行:windows server 2003 SP2
IIS 6.0
ASP。. NET版本4.0.30319

根据选项的不同,验证时间在30-60秒之间。
(注意:使用常规ldap,它立即进行身份验证,没有延迟)

Server 2正在运行:windows server 2008 SP2
IIS 7.0
ASP。. NET版本4.0.30319

运行与Server1完全相同的代码,Server2几乎立即进行身份验证。
(我也在另一个IIS 7.0服务器上尝试了代码,结果相同)

以前有人遇到过这个问题吗?
是否有在IIS 6.0服务器和IIS 7.0服务器上进行身份验证的替代方法?
是否有一些我需要配置,添加,删除等,?

谢谢你的帮助。

..............................................................................................................................................

(更新)

我在做ldap认证请求时打开了wireshark。
我已经创建了一个文件,包含所有超过636的请求。
可以在这里查看:Server1 636流量

差距最大的是:

。1949在1.115583秒- No. 06788在14.501754秒

第6803号在14.64297秒-第11742号在27.921379秒

该端口上的所有其他流量在同一秒内发生。

注意:Server2上的流量大致相同,但都发生在2-3秒之间。
可以在这里查看:Server2 636流量

我运行netstat -ano "命令,在登录时发现ldap的连接如下:

原本地地址外地址状态PID
TCP 10.1.72.74:1761 10.1.72.54:636 ESTABLISHED 3688
TCP 10.1.72.74:1800 10.1.72.54:636 ESTABLISHED 3688
TCP 10.1.72.74:1825 10.1.72.54:636 ESTABLISHED 3688

安全LDAP认证问题

看看我在ServerFault上的回答…

服务可能无法访问:

C:'Documents and Settings'All Users'Application微软数据' ' RSA加密' ' MachineKeys

你提及:

日期:3/25/2013时间:10:11:06 AM来源:channel "A fatal error试图访问SSL客户端凭据私有时发生关键。

检查注册表项,查看支持的SSL/TLS版本;一个可能导致握手问题的问题……(参见下面给出的链接中的场景5)

HKEY_LOCAL_MACHINE ' SYSTEM ' CurrentControlSet ' SecurityProviders ' SCHANNEL ' '控制协议

对于一些相关的场景及其解决方案,请阅读ssl相关问题的故障排除服务器证书

PrincipalContextValidateCredentials方法基本上是LDAP绑定操作的包装器。要阅读的两篇关键文章是IADsOpenDSObject::OpenDSObject和LDAP ADsPath。

您正在使用SSL,因此如果您希望它尽可能高效,则需要指定它。关于ValidateCredentials方法的ContextOptions参数的文档实际上听起来不支持这一点:

一个或多个ContextOptions枚举值的组合,用于绑定到服务器。该参数只能指定简单绑定是否使用SSL或协商绑定。

假设我误解了文档,并且ValidateCredentials方法确实支持指定Negotiate | SecureSocketLayer,您需要查看如何发送用户名。在OpenDSObject文章中,它给出了关于用户名格式的建议:

您可以将lpszUserName作为以下字符串之一传入:

  1. 用户帐号名,如"jeffsmith"。如果要单独使用用户名,只需要在参数lnReserved中设置ADS_SECURE_AUTHENTICATION标志。

  2. 以前版本的Windows NT的用户路径,例如"Fabrikam'jeffsmith"

  3. 专有名称,如"CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC= com"。要使用DN, lnReserved参数必须为零,或者必须包含ADS_USE_SSL标志

  4. 用户主体名(UPN),如"jeffsmith@Fabrikam.com"。要使用UPN,您必须为目标用户对象的userPrincipalName属性分配适当的UPN值。

您正在设置SSL标志,因此您必须使用2、3或4。

注:在示例代码中,您在构造函数中指定域的DNS名称。如果您在实际代码中指定服务器,则需要添加ServerBind标志。