gpt4 book ai didi

c# - 使用 SSL 联系 Active Directory

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:50 31 4
gpt4 key购买 nike

我有一种方法可以根据 Active Directory 验证用户凭据。我想将此方法与 SSL 结合使用,但无法正常工作。

主要问题是我有一个在我们网络之外的服务器(它叫 DMZ 吗?)。从那里我想联系我的事件目录,这就是我想使用 SSL 的原因。

在我的本地计算机(不是来自 DMZ)上使用它时出现此错误:

System.DirectoryServices.AccountManagement.PrincipalServerDownException: The server could not be contacted. ---> System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.
at System.DirectoryServices.Protocols.LdapConnection.Connect()
at System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID)
at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)
at System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request)
at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)

--- End of inner exception stack trace ---
at System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
at 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 会很好。

我的方法:

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?

最佳答案

您确定它支持 SSL 并且防火墙已打开以允许该连接吗?

LDAP 使用端口 389。LDAPS 使用端口 636。

如果您安装了 telnet 客户端,您可以使用它来检查连接:

telnet yourdomain.com 636

如果你得到一个空白屏幕,它就起作用了。如果无法连接,它会告诉您。

如果它是开放的,但它仍然不起作用,它可能正在使用自签名 SSL 证书。检查 Windows 事件日志中是否存在与证书相关的错误。

我还使用 Chrome 来检查证书。你必须像这样运行 chrome:

chrome.exe --explicitly-allowed-ports=636

然后浏览到 https://yourdomain.com:636 并查看它是否给您任何证书错误。然后就可以实际看到证书了。如果这是问题所在,您可以导入证书并明确信任它。

关于c# - 使用 SSL 联系 Active Directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797859/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com