3

Server1およびServer2のASP.NET4(4.0.30319)アプリケーションプールに展開されたWebフォームの背後にあるコードで次のC#コードを使用しています。

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
IIS6.0ASP.NET
バージョン4.0.30319

オプションにもよりますが、認証には30〜60秒かかります。
(注:通常のLDAPを使用すると、遅延なしですぐに認証されます)

サーバー2が実行されています:Windows Server 2008 SP2
IIS7.0ASP.NET
バージョン4.0.30319

Server1とまったく同じコードを実行すると、Server2はほぼ瞬時に認証されます。
(別のIIS 7.0サーバーに対しても同じ結果でコードを試しました)

誰かが以前にこの問題に遭遇したことがありますか?
IIS6.0サーバーとIIS7.0サーバーで認証する別の方法はありますか?
設定、追加、削除などが必要なものはありますか?

これについて助けてくれてありがとう。

.................................................。 .................................................。 .........................................。

[アップデート]

LDAP認証要求を行っているときにwiresharkをオンにしました。
636を超えるすべてのリクエストを含むファイルを作成しました
。ここで表示できます: Server1636トラフィック

最大のギャップは次の間にあります。

No.1949(1.115583秒)-No.06788(14.501754秒
)および
No.6803(14.64297秒)-No.11742(27.921379秒)

そのポート上の他のすべてのトラフィックは、同じ秒内に発生します。

注:Server2にはほぼ同じ量のトラフィックがありますが、すべて2〜3秒の間に発生します。
ここで表示できます:Server2636トラフィック

netstat -ano”コマンドを実行し、ログインしたときにldapsの次の接続が見つかりました。

プロトローカルアドレス外部アドレス状態
PIDTCP10.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

4

3 に答える 3

2

ServerFaultで私の答えを見てください...

サービスがアクセスできない場合があります。

C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys

あなたの言及:

日付:2013年3月25日時間:10:11:06 AMソース:Schannel"SSLクライアントの資格情報の秘密鍵にアクセスしようとしたときに致命的なエラーが発生しました。

可能性が高くなります。

于 2013-04-03T08:19:47.903 に答える
1

レジストリキーのエントリをチェックして、サポートされているSSL/TLSのバージョンを確認してください。ハンドシェイクの問題が発生する可能性のある問題...(以下のリンクのシナリオ5を参照)

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ Protocols

いくつかの関連するシナリオとその解決策については、SSL関連の問題のトラブルシューティングサーバー証明書を読んでください

于 2013-03-28T11:48:56.760 に答える
1

PrincipalContextValidateCredentialsメソッドは、基本的にLDAPバインド操作のラッパーです。このために読むべき2つの重要な記事は、IADsOpenDSObject::OpenDSObjectLDAPADsPathです。

SSLを使用しているので、SSLをできるだけ効率的にしたい場合は、SSLを指定する必要があります。ContextOptionsメソッドの引数に関するドキュメントは、ValidateCredentials実際にはこれをサポートしていないように聞こえます。

1つ以上のContextOptions列挙値の組み合わせは、サーバーへのバインドに使用されるオプションを評価します。このパラメーターは、SSLの有無にかかわらず単純バインド、またはバインドのネゴシエートのみを指定できます。

私がドキュメントを誤って解釈していて、ValidateCredentialsメソッドが実際に指定をサポートしていると仮定するとNegotiate | SecureSocketLayer、ユーザー名の送信方法を確認する必要があります。OpenDSObjectの記事では、ユーザー名の形式について次のアドバイスを提供しています。

lpszUserNameは、次のいずれかの文字列として渡すことができます。

  1. 「jeffsmith」などのユーザーアカウントの名前。ユーザー名を単独で使用するには、lnReservedパラメーターにADS_SECURE_AUTHENTICATIONフラグのみを設定する必要があります。

  2. 「Fabrikam\jeffsmith」などの以前のバージョンのWindowsNTからのユーザーパス。

  3. 「CN=JeffSmith、OU = Sales、DC = Fabrikam、DC=Com」などの識別名。DNを使用するには、lnReservedパラメーターがゼロであるか、ADS_USE_SSLフラグが含まれている必要があります。

  4. 「jeffsmith@Fabrikam.com」などのユーザープリンシパル名(UPN)。UPNを使用するには、ターゲットユーザーオブジェクトのuserPrincipalName属性に適切なUPN値を割り当てる必要があります。

SSLフラグを設定しているため、2、3、または4を使用する必要があります。

PSサンプルコードでは、コンストラクターでドメインのDNS名を指定しています。実際のコードでサーバーを指定する場合は、ServerBindフラグを追加する必要があります。

于 2013-04-02T19:17:02.070 に答える