24

SilverlightアプリケーションでHTTPSエンドポイントに対してWeb サービス呼び出しを実行しようとすると、次のエラーが発生します。

ここに投稿されたのと同じ問題:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/4c19271a-f5e6-4659-9e06-b556dbdcaf82/

したがって、提案の 1 つは次のとおりです。証明書の。」

これは単なるデモ サーバーであるため、証明書エラーが発生します

クライアントをセットアップする方法は次のとおりです。

BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
_ws = new AnnotationService.AnnotationClient(binding, new EndpointAddress(myAddress));

検証をスキップするように WCF に指示するにはどうすればよいですか?

4

2 に答える 2

33

Silverlight アプリケーションをホストする Web サーバーとリモート WCF サービスとの間のクロスドメイン通信を許可することにより、Silverlight でこれを実現できる場合があります。

その場合、WCF サービスがホストされているドメインのルートにclientaccesspolicy.xmlファイルを配置する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="http://*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

このアプローチについてMSDNが述べていることは次のとおりです。

HTTP アプリケーションでホストされている Silverlight コントロールから HTTPS サービスへのアクセスを許可するには、<domain uri=”http:// ” />* 要素を<allow-from>要素内に配置する必要があります。

私はこれを自分で試したことはありませんが、試してみる価値があるかもしれません。詳細については、次のリソースも確認してください。


.NET で X.509 証明書の検証を無効にする

.NET アプリケーションの場合、このサンプルの WCF 構成では、証明書が信頼されているかどうかと、クライアントでまだ有効であるかどうかの両方の検証が無効になります。

<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="DisableServiceCertificateValidation">
            <clientCredentials>
                <serviceCertificate>
                    <authentication certificateValidationMode="None"
                                    revocationMode="NoCheck" />
                </serviceCertificate>
            </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <client>
      <endpoint address="http://localhost/MyService"
        behaviorConfiguration="DisableServiceCertificateValidation"
        binding="wsHttpBinding"
        contract="MyNamespace.IMyService"
        name="MyServiceWsHttp" />
    </client>
</system.serviceModel>

代替ソリューションは、サービスによって提供される X.509 証明書を検証するカスタム ロジックを提供することです。その場合、次に従って構成ファイルを変更する必要があります。

<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="DisableServiceCertificateValidation">
            <clientCredentials>
                <serviceCertificate>
                    <authentication certificateValidationMode="Custom"
                                    customCertificateValidatorType="MyCertificateValidator, Client"
                                    revocationMode="NoCheck" />
                </serviceCertificate>
            </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <client>
      <endpoint address="http://localhost/MyService"
        behaviorConfiguration="DisableServiceCertificateValidation"
        binding="wsHttpBinding"
        contract="MyNamespace.IMyService"
        name="MyServiceWsHttp" />
    </client>
</system.serviceModel>

次に、 X509CertificateValidatorから派生するクラスを作成して、カスタム検証ロジックを実装します。

public class MyCertificateValidator : X509CertificateValidator
{
    public override void Validate(X509Certificate2 certificate)
    {
        // Add custom validation logic
        // Throw an exception to fail validation
    }
}

いつものように、 MSDNでより詳細な例を見つけることができます。

于 2009-01-26T14:14:49.303 に答える
2

これは、証明書の検証エラーのようには見えません。Web サービスの構成エラーのようです。エンドポイントの構成をサーバーに投稿できますか?

WCF サービスは既定では SSL をサポートしていません。バインディング構成を作成し、bindingConfiguration 属性を使用してエンドポイントをその構成にポイントすることにより、トランスポート セキュリティを有効にする必要があります。

SSL をサポートするバインディング構成の例を次に示します。

<bindings>
  <basicHttpBinding>
    <binding name="SecureTransport">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

エンドポイント構成は次のようになります。

<endpoint address=""
   binding="basicHttpBinding"
   bindingConfiguration="SecureTransport"
   contract="MyServices.IWebService" />
于 2008-12-03T20:26:56.940 に答える