証明書ベースの相互認証を必要とする Win2008 (IIS7) でホストされている Web サービスに接続しています。.NET 2.0 ランタイムで実行されているクライアントによってサービスが呼び出されると、操作は 403 で失敗します。そのフレームで指定されています。Certificate Requestでサーバーから提供された CA 証明書のリストを見るクライアントの証明書で使用される CA が存在しません。これは、サービスが証明書を信頼しない場合に証明書を送信する意味があるため、理にかなっているようです。ただし、.NET 4.0 ランタイムに対して再コンパイルされたツールを使用して同じ呼び出しを行うと、動作が異なります。クライアントの証明書フレームには、使用するように構成された証明書が含まれています。MSDNで SslStream に変更が加えられているのを見ましたが、これは私が実行しているものですか? 異なるランタイム バージョンが同じサービス エンドポイントに対して異なる動作をすることは、かなり不安です。
質問する
118 次
1 に答える
1
はい、ランタイムの 2 つのバージョン間で動作が変更されました。微妙な変更は、クライアントが証明書要求フレームを処理する方法にありました。私たちが経験した問題は、不適切なルート証明書の更新が原因で、サーバーの信頼されたルート ストアに CA が多すぎることでした。問題。これにより、信頼できる CA のサブセットが Certificate Request Frame の証明書配列に返されました。返される CA のリストは適切なサブセットであるため、一部の要求ではクライアント証明書に署名したルートが含まれていましたが、他の要求では含まれていませんでした。.NET 2.0 クライアントは、サーバーによって提供される一連の信頼できる機関の外部にある証明書を含めないことで、TLS 仕様を適切に尊重しました。.NET 4.0 クライアントは、構成方法を尊重し、WCF 構成を介して指定されたクライアント証明書を提供しました。
于 2015-05-14T19:46:36.617 に答える