パブリックWebサービスを利用するシステムを作成しています。VS2008と従来の.NETFramework2.0Webサービステクノロジを使用してWebサービスを利用しています。私の問題は、Webサービスを消費したり、その操作を呼び出したりすることではありません。
問題は、署名された操作から応答が返されると、生成されたプロキシが署名の検証を開始することです。そのとき、WSE3003エラーが発生します。私は(私が思うに)サービス証明書をLocalComputer / TrustedPeople証明書ストレージにロードしました。その証明書パスを見ると、すべて問題がないことがわかります。
VeriSignクラス3パブリックプライマリ
CAwww.verisign.com/CPSIncorp.byRef。LIABILITY LTD。(c)97 ...
servcert.there.com
しかし、私は次の例外を受け取り続けます:
Microsoft.Web.Services3.ResponseProcessingException:WSE910:応答メッセージの処理中にエラーが発生しました。エラーは内部例外で確認できます。応答メッセージは、Responseプロパティにもあります。---> Microsoft.Web.Services3.Security.SecurityFault:セキュリティトークンを認証または承認できませんでした---> System.Security.SecurityException: WSE3003:証明書の信頼チェーン を検証できませんでした。 証明書がTrustedPeopleCertificateストアに正しくインストールされているかどうかを確認してください。または、これがテスト証明書である場合は、allowTestRoot構成セクションをtrueに設定することをお勧めします。
次のコードはおそらくコンパイルされず、機密性の高いもののいくつかを削除しましたが、これが私の役割の背後にある考え方です:
// Construct the wse proxy
MyServiceWse wsClient = new MyServiceWse();
// Assign the credentials
UsernameToken userToken = new UsernameToken("user", "pass", PasswordOption.SendPlainText);
wsClient.SetClientCredential(userToken);
wsClient.RequestSoapContext.IdentityToken = userToken;
// Find the client and service certificates
X509Certificate2 clientCert = MyCertificateManager.FindCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, "mycert.here.com");
X509Certificate2 serviceCert = MyCertificateManager.FindCertificate(StoreLocation.LocalMachine, StoreName.TrustedPeople, "servicecert.there.com");
// Add the policy to the proxy
Policy policy = new Policy();
MySecurityClientAssertion assertion = new MySecurityClientAssertion();
assertion.SetServiceCertificate(serviceCert);
assertion.SetClientCertificate(clientCert);
policy.Assertions.Add(assertion);
wsClient.SetPolicy(policy);
// Assign the service URL and call an operation
wsClient.Url = "https://services.there.com/TheirService.asmx";
TheirOperationResponse r = wsClient.CallTheirOperation();
証明書の保存や信頼の連鎖よりもはるかに優れていることを理解できるので、コードが間違っていることを願っています。どんな助けでも素晴らしいでしょう。努力してくれてありがとう。