gpt4 book ai didi

wcf - 如何告诉 WCF 跳过证书验证?

转载 作者:可可西里 更新时间:2023-11-01 15:05:14 24 4
gpt4 key购买 nike

尝试制作 web service调用HTTPS我的端点 Silverlight应用程序导致此错误:“找不到与具有绑定(bind) WSHttpBinding 的端点的方案 https 匹配的基地址。注册的基地址方案是 [http]”

与此处发布的问题相同:

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

因此,其中一个建议是这样的:“另一个问题可能是证书名称和机器名称不一致,这导致 WCF 不匹配。如果是这种情况,您可以告诉 WCF 跳过证书验证。”

好吧,我确实收到证书错误,因为这只是一个演示服务器。

这是我设置客户端的方式:

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

如何告诉 WCF 跳过验证?

最佳答案

您可以通过允许托管 Silverlight 应用程序的 Web 服务器与远程 WCF 服务之间的跨域通信在 Silverlight 中实现这一点。

在这种情况下,您需要放置一个 clientaccesspolicy.xml托管 WCF 服务的域的根目录中的文件:

<?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 states about this approach :

To allow access to an HTTPS service from any Silverlight control hosted over HTTP application, you need to put the <domain uri=”http://” />* element inside your <allow-from> element.

我自己还没有尝试过,但值得一试。另请务必查看以下资源以获取更多详细信息:


在 .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
}
}

与往常一样,您可以找到 a more detailed example在 MSDN 上。

关于wcf - 如何告诉 WCF 跳过证书验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/338385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com