この問題に関するいくつかの質問がありました。ここに私の状況があります: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を実行している開発マシンでは、証明書がインポートされています。
サービスには、LocalMachineルート証明書ストアにアクセスするための十分な権限がありますか。 FindTypeがあなたのcertstoreに入り、thumprintをコピーするとき、SubjectNameは使用しないでください。それを使用してください。 – albertjan