web-dev-qa-db-ja.com

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

[Webサービス[〜#〜] https [〜#〜] アプリケーションのエンドポイントを作成しようとすると、このエラーが発生します Silverlight アプリケーション:「WSHttpBindingをバインドしているエンドポイントのスキームhttpsに一致するベースアドレスが見つかりませんでした。登録されているベースアドレススキームは[http]です」

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

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

したがって、提案の1つは次のとおりです。「もう1つの問題は、証明書名とマシン名が一致していない可能性があり、これが原因です [〜#〜] wcf [〜#〜] これが当てはまる場合は、証明書の検証をスキップするようにWCFに指示できます。」

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

クライアントの設定方法は次のとおりです。

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

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

24
Mike Blandford

Silverlightでこれを実現するには、SilverlightアプリケーションをホストするWebサーバーとリモートWCFサービスの間でクロスドメイン通信を許可するを使用します。

その場合、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で より詳細な例 を見つけることができます。

33

これは、証明書検証エラーのようには見えません。 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" />
2
joshperry