我有一个方法可以验证针对Active Directory的用户凭据。我想将此方法与SSL一起使用但我无法使其工作。
主要问题是我有一个服务器在我们网络之外(它叫做DMZ吗?)。从那里我想联系我的活动目录,这就是我想使用SSL的原因。
在我的本地计算机(而不是DMZ)上使用它时,我收到此错误:
System.DirectoryServices.AccountManagement.PrincipalServerDownException:无法联系服务器。 ---> System.DirectoryServices.Protocols.LdapException:LDAP服务器不可用 在System.DirectoryServices.Protocols.LdapConnection.Connect()
在System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest请求,Int32& messageID)
在System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest请求,TimeSpan requestTimeout)
在System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request)
在System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName,ServerProperties& properties)---内部异常堆栈跟踪结束---
at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName,ServerProperties& properties)
在System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container,ContextOptions options,String userName,String password)
at System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType,String name,String container,ContextOptions options)
at Authorization.AuthorizeAD.ValidateCredentials(String username,String password)
我认为在我从服务器上尝试使用SSL之前,最好先使用SSL。
我的方法:
public bool ValidateCredentials(string username, string password) {
using (
var context = new PrincipalContext(ContextType.Domain, ContextName, ContextContainer,
ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing |
ContextOptions.SecureSocketLayer)) {
return context.ValidateCredentials(username, password);
}
}
如前所述,没有ContextOptions.SecureSocketLayer
它可以正常工作(如果参数为null,则默认为其他三个)
有谁知道我应该如何使用PrincipalContext
更正SSL?
答案 0 :(得分:5)
您确定它支持SSL并且防火墙已打开以允许该连接吗?
LDAP使用端口389.LDAPS使用端口636。
如果安装了telnet客户端,则可以使用它来检查连接:
telnet yourdomain.com 636
如果你看到一个空白的屏幕,它就可以了。如果它无法连接,它会告诉你。
如果它已打开但仍然无效,则可能是使用自签名SSL证书。检查Windows事件日志中是否存在与证书相关的错误。
我还使用Chrome查看证书。你必须像这样运行chrome:
chrome.exe --explicitly-allowed-ports=636
然后浏览到https://yourdomain.com:636
,看看它是否为您提供了任何证书错误。然后你就可以看到证书了。如果出现问题,您可以导入证书并明确信任它。