1

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 要求)
で System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig (文字列 serverName、ServerProperties& プロパティ)

--- 内部例外スタック トレースの終わり ---
System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)
で System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()
で System.DirectoryServices.AccountManagement.PrincipalContext で。 .ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password)
System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options)
at Authorization.AuthorizeAD. ValidateCredentials(文字列のユーザー名、文字列のパスワード)

サーバーから試す前に、ローカルから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 の場合、他の 3 つはデフォルトで動作します)。

PrincipalContextSSLで正しい使用方法を知っている人はいますか?

4

1 に答える 1

5

SSL をサポートしていて、その接続を許可するためにファイアウォールが開いていることは確かですか?

LDAP はポート 389 を使用します。LDAPS はポート 636 を使用します。

Telnet クライアントがインストールされている場合は、それを使用して接続を確認できます。

telnet yourdomain.com 636

空白の画面が表示されたら、うまくいきました。接続できない場合は、通知されます。

それが開いていても機能しない場合は、自己署名 SSL 証明書を使用している可能性があります。証明書関連のエラーについては、Windows イベント ログを確認してください。

また、Chrome を使用して証明書を確認しました。次のようにクロムを実行する必要があります。

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

次にhttps://yourdomain.com:636、参照して、証明書エラーが発生するかどうかを確認します。すると、実際に証明書を見ることができます。それが問題である場合は、証明書をインポートして明示的に信頼できる場合があります。

于 2016-03-05T23:01:34.097 に答える