3

トランスポートセキュリティを追加したいセルフホストサービスがあります。WSHttpBinding.SecurityModeをTransportに設定し、ClientCredentialTypeをHttpClientCredentialType.Noneに設定しました。証明書を作成し、ServiceHost.Credentials.ServiceCertificate.SetCertificate()を使用してホストに設定しました。また、netsh http add sslcert ipport = 127.0.0.1:80 certhash = [MyCertHash] certstorename = MYappid=を使用して登録しました。 [TheGuidOfTheAppTahtRunsTheService] verifyclientcertrevocation = disable

サービスを呼び出そうとすると、次のエラーメッセージが表示されます。「リモートパーティがトランスポートストリームを閉じたため、認証に失敗しました。」

これは、クライアントとサーバーが相互に認証しようとすることを意味しますか?どうすれば無効にできますか?明確にするために、私はクライアントに証明書をインストールしたくありません。認証atmを探しているのではなく、可能であればメッセージの内容を保護するだけです。

4

3 に答える 3

2

証明書は、作業を開始するのに苦労する場合があります。WCF で常に最初に行うべきことは、トレースをオンにすることです。

http://msdn.microsoft.com/en-us/library/ms733025.aspx

次に、SVCTraceViewer を使用して、サービスがバックグラウンドで生成している例外を表示し、何が起こっているのかについて少し洞察を得ることができます。これは、多くの WCF の問題で必須です。10 回中 9 回、トレースはあなたが知る必要があるすべてを教えてくれます。

また、証明書は両方のマシンにインストールする必要があるため、クライアントとサーバーの両方に証明書が構成されていることを確認してください。

于 2008-10-13T14:58:30.400 に答える
2

この MSDNの投稿は、問題の解決に役立つ場合があります。投稿の最初の要求は、あなたのものとは異なるセキュリティ モードを構成することですが、トラブルシューティングのためにトランスポート モードに切り替えており、その情報はあなたの状況に当てはまるはずです。

証明書をインストールするために行ったことがすべて説明されている場合は、いくつかの手順が不足しています。この投稿では、有効な証明書をインストールするプロセスの概要を説明しています。幸運を!!

于 2008-10-13T14:18:51.947 に答える
2

この同じエラーを追跡しようとしていたところ、この投稿に出くわしました。クライアント側の HTTP スタックにエラーが表示され、サーバー側では要求が WCF レイヤーに到達する前に拒否されるため、WCF トレースは役に立ちません。

十分に徹底していないことがわかりました。以下のすべての条件が満たされていることを確認してください。これらのすべてが適切に設定されているわけではありませんが、いくつかはありました。

  1. サーバーの証明書発行者は、同じマシン上に有効で一致する発行元の信頼されたルート CA を持っています。

  2. サーバー証明書のサブジェクト名はマシン名と正確に一致し、クライアントがアクセスしているマシン名も一致します (「localhost」とサーバーのEnvironment.MachineName値)

  3. サーバー証明書の拇印は、次のコマンドを使用して管理者によって設定されています ( netsh新しいバージョンの Windows では同等のものを使用してください)。

    httpcfg set ssl -i 0.0.0.0:{port} -h {thumbprint}
    
  4. このクライアントも、クライアント マシン上に同じ有効な発行ルート CA 証明書を持っています。

良いリファレンスは次のとおりです: SSL with Self-hosted WCF Service

于 2011-02-15T18:07:19.403 に答える