0

wsHttpBindingを使用してWCFサービスをホストしようとしています。makecertを使用して証明書を作成し、web.configにいくつかの行を追加しました。

これは私が得ているエラーです:

System.ArgumentException: The certificate 'CN=WCfServer' must have a private key that is capable of key exchange. The process must have access rights for the private key.

グーグルアップすると、証明書ファイルのアクセス権に問題があるようです。caclsを使用して、NETWORK SERVICEとユーザー名に読み取り権限を付与しましたが、何も変更されませんでした。

また、証明書ファイルのプロパティのセキュリティ設定に移動し、ネットワークサービスとユーザー名を完全に制御しました。再び無駄に。

問題が何であるか、そして私が正確に何をする必要があるかについて私を導くことができますか?私はこれらの証明書のことで本当に不安定です。

これが私のweb.configです。

<system.serviceModel>

<services>
        <service name="Abc.Service" behaviorConfiguration="Abc.ServiceBehavior">
            <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Abc.BindConfig" contract="Abc.IService">
                <identity>
                    <dns value="localhost"/>
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>

<behaviors>
    <serviceBehaviors>
        <behavior name="Abc.ServiceBehavior">
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>

            <serviceCredentials>
                <clientCertificate>
                  <authentication certificateValidationMode="PeerTrust"/>
                </clientCertificate>
                <serviceCertificate findValue="WCfServer" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName" />
            </serviceCredentials>

        </behavior>
    </serviceBehaviors>
</behaviors>

<bindings>
  <wsHttpBinding>
    <binding name="Abc.BindConfig">
      <security mode="Message">
        <message clientCredentialType="Certificate" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

</system.serviceModel>
4

3 に答える 3

3

Webから収集できたものから、証明書の構成に問題があるような、アクセス許可の問題ではないようです。

ここに、秘密鍵へのアクセスを許可する方法についての説明があります。

IIS7をインストールして実行していますか。WCF通信に正常に使用した証明書(makecertの代わりに)を作成するための非常に単純なツールがあります。

于 2010-05-03T12:12:30.390 に答える
2

わかりました。問題が何であるかを理解しました。makecertを使用して証明書を作成する場合は、-peオプションを使用する必要があります。これにより、生成されたプライベートをエクスポート可能にして、証明書で使用できるようになります。問題は、vs2008にバンドルされているmakecertがバージョン5.131であり、-peオプションがないことでした。オプションのあるMicrosoftSDK6でバージョン6.0を見つけました。

これは、.netの初心者として私が見つけた最大の問題です。同じものの互換性のないバージョンが非常に多くあり、インターネットで何かを検索すると、誰かが話しているバージョンがわかりません。

于 2010-05-04T05:30:55.860 に答える
1

Windows HTTPサービス証明書構成ツール(WinHttpCertCfg.exe)を見てください。これにより、X.509証明書の秘密鍵へのアクセスをWindowsアカウントに許可できます。

これは、ツールの使用方法を説明するブログ投稿です。

于 2010-05-03T13:09:36.690 に答える