質問

この問題に関連する質問をいくつか見ましたが、そこに示されているアイデアの多くを試してみましたが、成功しませんでした。私の状況は次のとおりです。

会社のイントラネット経由で Web サービスにアクセスしています。svcutil.exe を使用して WCF のクライアント クラスを生成しました。サービスの開発中に Web サービス呼び出しを問題なく実行でき、認証資格情報も必要なかったので、コードが機能することがわかりました。当時、コードは SSL 上で実行されていました。必要な証明書を信頼されたルート証明機関ストアにインポートしましたが、すべて問題ありませんでした。

ステージ環境に移行したばかりで、接続に資格情報が必要になるようにサービスがアップグレードされました。接続を新しいエンドポイントに切り替え、認証するコードを追加しました。wcf を使用するのは初めてなので、明らかな間違いがある場合はご容赦ください。私の問題は、認証のためにサービスに渡すコードを介して証明書を見つけることができないことです。これは、オンラインで見つけたいくつかのコード例に基づいています。

svcutil によって生成された構成の例を次に示します。

<system.serviceModel>
  <bindings>
   <basicHttpBinding>
    <binding 
        name="xxxSOAPBinding" 
        .... (irrelevant config settings)....
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="Transport">
      <transport clientCredentialType="Certificate" />
     </security>
    </binding>
   </basicHttpBinding>
  </bindings>
  <client>
   <endpoint address="https://xxxServices_1_0_0"
    binding="basicHttpBinding" bindingConfiguration="xxxSOAPBinding" 
    contract="xxxService" name="xxxService" />
  </client>
 </system.serviceModel>

そして、これが接続を試みるために使用しているコードです。証明書を見つけようとするとすぐに例外がスローされます。

using (var svc = new xxxServiceClient())
{
    svc.ClientCredentials.UserName.UserName = "XXX";
    svc.ClientCredentials.UserName.Password = "XXX";

    svc.ClientCredentials.ClientCertificate
     .SetCertificate(StoreLocation.LocalMachine, StoreName.Root, 
                     X509FindType.FindBySubjectName, "xxx");
...
}

いくつかの異なる X509FindType を試しましたが、それらを証明書の値と照合しましたが、成功しませんでした。私のコードに何か問題がありますか?証明書ストアにクエリを実行して、渡している値を検証する別の方法はありますか?

Visual Studio を実行している開発マシンには証明書がインポートされています。

役に立ちましたか?

解決

愚かな質問が 2 つあります:

  • あなたは もちろん そもそも証明書はインストールされていますか?
  • これはこのステージング マシン専用の証明書ですか?

また、最初にユーザー名とパスワードを設定し、次に資格情報も設定するのは少し奇妙に思えます。ユーザー名とパスワードの部分をコメントアウトしていただけますか?それは何か違いがありますか?

マルク

他のヒント

あなたは証明書がローカルコンピュータストアにインポートされていることを確認されており、それがあるCurrentUserストアに可能性があります。

これは愚かに聞こえるかもしれませんが、あなたの証明書ストアにインストールされていますが、特定のステージングサービスの新しい証明書がありますか?それは最も可能性の高い問題だ。

あなたがスローされるものを例外は言及しなかったため、

また、それは問題はユーザー名/パスワードの使用を示すものではありませんバインドするとき、clientcertificate資格情報を設定する前に、ユーザー名/パスワードの認証情報を設定したことであることが可能です。そこに問題がある可能性が。彼らは、IIRC相互に排他的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top