2009-07-15 14 views
2

この問題に関するいくつかの質問がありました。ここに私の状況があります:WCF - 次の検索条件を使用してx.509証明書が見つからない

私は私の会社のイントラネット上で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"); 
... 
} 

私はいくつかの異なるX509FindTypesを試みたが、成功しません証明書上の値にそれらを一致しました。私のコードに何か問題がありますか?私が渡している値を検証するために証明書ストアを照会する別の方法はありますか?

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

+0

サービスには、LocalMachineルート証明書ストアにアクセスするための十分な権限がありますか。 FindTypeがあなたのcertstoreに入り、thumprintをコピーするとき、SubjectNameは使用しないでください。それを使用してください。 – albertjan

答えて

3

二つの愚かな質問:

  • あなたはあなたcertificiateが全くインストールされているよろしいですか?
  • これはこのステージングマシン専用の証明書ですか?

また、最初にすべてのユーザー名とパスワードを設定してから、資格情報を設定するのはちょっと奇妙なようです。ユーザー名/パスワードの部分をコメントアウトできますか?何か違いはありますか?

マルク・

+0

20秒で私を倒してください。:) – Randolpho

+0

- 私は感情を知っている - 私は恐ろしいオレンジを持っていた "別の答えが掲載されて"バナー私に何度もポップアップ:-) –

+0

それはインストールされていると思います。私は、証明書ダイアログをチェックすることでこれを確認していると思った。これを行うと、信頼されたルート証明機関タブの下に証明書が表示されます。確認するために何か確認する必要がありますか? 証明書はマシンに固有のものではありません。これは、Webサービスのためにネットワーク上で使用されます。 –

1

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

また、例外がスローされたことについては言及していないため、クライアント証明書の設定前にユーザー名とパスワードの資格情報を設定していた可能性があります。そこに問題があるかもしれません。彼らは相互排他的です、IIRC。

2

証明書がローカルマシンストアにインポートされているか、CurrentUserストアにある可能性がありますか。

+0

ローカルマシンストアに証明書をインポートするにはどうすればよいですか? – knagode

関連する問題