2

統合しているサードパーティのasmxサービスのラッパーとして使用されているWCFサービスがあります。通信しているサービスは、VisualStudioの[サービス参照の追加]ダイアログを使用して追加されました。WCFサービスのコードは、単体テストで実行されたときに機能し、ホストアプリケーションをデバッグするときにも機能します。

デバッグ時には、ホストはASP.NET開発サーバーで実行され、エラーなしで機能します。アプリケーションをローカルIISインスタンス(開発マシン、IIS 5.1と同じ)に展開すると、サービスが開始および実行されますが、サードパーティのasmxエンドポイントに接続すると次のエラーがスローされます。

System.ServiceModel.Security.SecurityNegotiationException: 
Could not establish trust relationship for the SSL/TLS secure channel with
authority 'xxxxx.thirdparty.com'. ---> System.Net.WebException: The underlying
connection was closed: Could not establish trust relationship for the SSL/TLS
secure channel. ---> System.Security.Authentication.AuthenticationException: 
The remote certificate is invalid according to the validation procedure.

これらは、サービスエンドポイントの構成ファイルの設定です。

<basicHttpBinding>
  <binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
    useDefaultWebProxy="false" proxyAddress="http://[internalWebProxyHere]">
    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
    <security mode="Transport">
      <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
      <message clientCredentialType="UserName" algorithmSuite="Default"/>
    </security>
  </binding>
</basicHttpBinding>

このサービスはVisualStudioで機能しますが、IISに展開した後は機能しません。AuthenticationExceptionsをデバッグするにはどうすればよいですか?

編集:クライアントエンドポイントは次のようになります:

<endpoint address="https://'xxxxx.thirdparty.com/thirdpartyendpoint.asmx" 
    binding="basicHttpBinding" bindingConfiguration="ServiceSoap" 
    contract="eContracting.ServiceSoap" name="ServiceSoap"
    behaviorConfiguration="Behavior"/>

そして、エンドポイントの動作を追加して証明書の検証を無効にしようとしましたが、これは役に立ちませんでした:

<behavior name="Behavior">
  <clientCredentials>
    <serviceCertificate>
      <authentication certificateValidationMode="None"/>
     </serviceCertificate>
    </clientCredentials>
</behavior>

サードパーティの証明書がRapidSSLCAによって発行された場合にも役立つ場合、証明書は有効です。私のローカル証明書ストアを見ると、この証明書は[中間証明機関]タブにありますが、[信頼されたルート証明機関]または[信頼された発行元]にはありません。

編集:問題は、「信頼されたルート証明機関」に証明書を追加することで解決されましたが、問題がありました。

  1. ControlPanel->InternetProperties->コンテンツ->証明書からの証明書のインポート。この方法でインストールすると、成功したと表示されますが、winhttpcertcfgには表示されません。
  2. start-> run-> type'certmgr.msc'を実行して証明書をインポートし、ここからインストールします。正常にインポートされたと表示されますが、winhttpcertcfgで証明書を使用できません。
  3. [開始]->[実行]->[MMC]で証明書をインポートし、証明書スナップインを使用すると機能します。Windows XPの手順を表示するには、ここをクリックしてください。

具体的には、これが機能しました。

  1. 開始->実行->MMC
  2. [ファイル]->[スナップインの追加と削除]
  3. [追加...]をクリックします
  4. [証明書]を選択して[追加]をクリックします
  5. コンピュータアカウントを選択し、次へをクリックします
  6. [ローカルコンピューター]を選択し、[完了]をクリックします
  7. [閉じる]をクリックします
  8. コンソールルートから次の場所に証明書をインポートします。

    • 信頼されたルート証明機関
    • 中間認証局
    • サードパーティのルート証明機関
4

1 に答える 1

2

サービスweb.configでトレースを有効にしてみてください。switchValueをVerboseに設定すると、より詳細なエラーを見つけることができる場合があります。証明書に問題がある可能性があります。

トレースの構成と有効化

また、サービス証明書の検証モードをnoneに設定してみることもできます。

X509ServiceCertificateAuthentication.CertificateValidationModeプロパティ

もう1つのオプションは、RapidSSLCAをローカルマシンの信頼されたルート証明機関にインポートすることです。カッシーニが証明書を検証していないか、無視しているのではないかと思います。

確認すべきもう1つの考えられる問題は、IISがサービスに対して実行されているアカウントに、証明書ストアから読み取るためのアクセス許可がない可能性があることです。

于 2012-07-17T18:31:31.180 に答える