4

LDAPユーザーのパスワードをリセットするために使用されるWebサイトで作業しています。SSL経由でサーバーに接続できません。さまざまなコードと認証タイプを試しました。

これは、WebサイトがホストされているLDAPとの接続のためにサーバーで使用されるものです。また、両方のSSLポートでテストしました。636および3269。

0 = ldap_set_option(ld, LDAP_OPT_ENCRYPT, 1)
res = ldap_bind_s(ld, NULL, &NtAuthIdentity?, NEGOTIATE (1158)); v.3

{NtAuthIdentity?: User='_ldapuser'; Pwd='unavailable';; domain = 'SJTPNOC.DOMAIN'}

ウェブサイトで次のコードを使用しています

LdapConnection connection = new LdapConnection(new LdapDirectoryIdentifier("SJTP.DOMAIN",636));

connection.SessionOptions.ProtocolVersion = 3;

connection.AuthType = AuthType.Basic;

connection.Credential = new NetworkCredential("CN=user,CN=Users,DC=SJTPNOC,DC=DOMAIN", "password","CN=Users,DC=SJTPNOC,DC=DOMAIN");

connection.SessionOptions.SecureSocketLayer=true;

connection.Bind();

「LDAPサーバーが利用できません」という例外が発生します。389ポートを使用し、SSLを使用せずにそのコードを試しましたが、正常に機能しています。

何が悪いのか教えてください。

4

2 に答える 2

4

暗号化のみが必要で、LDAPサーバーの強力な認証が必要ない場合は、次を追加する必要があります。

connection.SessionOptions.VerifyServerCertificate =
                new VerifyServerCertificateCallback((con, cer) => true);
于 2012-09-27T12:57:03.080 に答える
3

SSL経由での接続にも問題がありましたが、プレーンテキスト経由では問題がありませんでした。ネットワークスニッフィングを行ったところ、LdapConnection.AuthTypeをBasicに設定したにもかかわらず、クライアントマシンがSSLハンドシェイク用のクライアント証明書を見つけて使用していることがわかりました。見つかった証明書(VisualStudioと.NET LdapConnectionクラスのどちらに腹を立てるべきかわからない)は、LDAPサーバーが気に入らなかった安っぽい自己署名証明書でした。非常に安全な「サーバーが利用できません」というエラーが返されました。それのために良い。したがって、非常に単純な実装を提供するために必要なSessionOptionsにクライアント証明書リゾルバーデリゲートがあります。

public static X509Certificate ClientCertFinder(LdapConnection connection,
                                                byte[][] trustedCAs)
{
   return null;
}

次に、次のようなスタブを使用するようにSessionOptionsQueryClientCertificateCallbackデリゲートを設定します。

connection.SessionOptions.QueryClientCertificate =
      new QueryClientCertificateCallback(ClientCertFinder);

検証コールバックに対する@jblの回答のように、これをワンライナーにすることもできますが、いつかclient-certificate-authenticationを実行したいと思うかもしれません。そのスタブがあると、その方法を思い出させることができます。

于 2013-07-29T21:51:27.000 に答える