安全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
看看我在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相关问题的故障排除服务器证书
PrincipalContext
的ValidateCredentials
方法基本上是LDAP绑定操作的包装器。要阅读的两篇关键文章是IADsOpenDSObject::OpenDSObject和LDAP ADsPath。
您正在使用SSL,因此如果您希望它尽可能高效,则需要指定它。关于ValidateCredentials
方法的ContextOptions
参数的文档实际上听起来不支持这一点:
一个或多个ContextOptions枚举值的组合,用于绑定到服务器。该参数只能指定简单绑定是否使用SSL或协商绑定。
假设我误解了文档,并且ValidateCredentials
方法确实支持指定Negotiate | SecureSocketLayer
,您需要查看如何发送用户名。在OpenDSObject文章中,它给出了关于用户名格式的建议:
您可以将lpszUserName作为以下字符串之一传入:
用户帐号名,如"jeffsmith"。如果要单独使用用户名,只需要在参数lnReserved中设置ADS_SECURE_AUTHENTICATION标志。
以前版本的Windows NT的用户路径,例如"Fabrikam'jeffsmith"
专有名称,如"CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC= com"。要使用DN, lnReserved参数必须为零,或者必须包含ADS_USE_SSL标志
用户主体名(UPN),如"jeffsmith@Fabrikam.com"。要使用UPN,您必须为目标用户对象的userPrincipalName属性分配适当的UPN值。
您正在设置SSL标志,因此您必须使用2、3或4。
注:在示例代码中,您在构造函数中指定域的DNS名称。如果您在实际代码中指定服务器,则需要添加ServerBind
标志。