1

これに対する解決策を求めて、インターネット(およびSO)を精査しました。今日の時点で RHS に表示される質問はどれも私の問題を解決しないので、ここに行きます。

TLDR:クライアント証明書を必要とする WCF サービスを構築しようとしていますが、次のエラーが発生しています。

このサービスのセキュリティ設定には Windows 認証が必要ですが、このサービスをホストする IIS アプリケーションでは有効になっていません。

テスト用に生成した自己署名証明書をサービスに識別させる際に、いくつかの問題がありました。証明書を持っていないクライアントは、この例外の代わりに 403 (禁止) の IIS エラーを表示するため、現在は機能しているようです。

私のサービス web.config の関連スニペット:

<wsHttpBinding>
    <binding name="clientCertificateBinding">
        <security mode="Message">
            <message clientCredentialType="Certificate" />
        </security>
    </binding>
</wsHttpBinding>

2 つのエンドポイントが定義されています。1 つは "mex" 用 (削除しようとしましたが、問題は解決しません) で、もう 1 つは実際のサービス用です。サービスバインディングはbinding="wsHttpBinding" bindingConfiguration="clientCertificateBinding"仕様として使用します。

後で、サービス証明書を使用するように自分の行動に指示します。

<behavior name="AwesomeBehaviour">
    <serviceMetadata httpsGetEnabled="true"/>
    <serviceCredentials>
        <serviceCertificate
        storeLocation="LocalMachine"
        storeName="My"
        findValue = 'CN=...' />
    </serviceCredentials>
    <serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>

また、IIS はRquire SSL に設定されており、クライアント証明書が必要です。それらを受け入れるだけでなく、それらを必要とします。

私は(一部の人が示唆しているように)セキュリティモードを から に変更してみTransportましMessageTransportWithMessageCredential。これは何もしません。

NTLM とトランスポート資格情報の種類としてのネゴシエートについて話しているこのスレッドもあります。これで問題は解決しません。

について説明しているこの KB 記事もありcscript.exeます。互換性ツールをインストールし、NTLM 認証プロバイダーを追加しましたが、役に立ちませんでした。

何が欠けているのかわかりません。

4

1 に答える 1

1

うーん。解決策は次の 2 つでした。

  • のセキュリティ タグに設定を追加します<transport clientCredentialType="Certificate" />
  • mexバインディングを外す

そして、すべてが機能します!\o/

于 2012-07-05T16:59:28.833 に答える