gpt4 book ai didi

.net - 如何使用带有客户端证书的 HTTPS 传输使用证书对 WCF 消息进行签名

转载 作者:太空宇宙 更新时间:2023-11-03 12:46:49 24 4
gpt4 key购买 nike

编辑:

我最终确定 IClientMessageInspector 似乎没有反射(reflect)消息签名,所以当我在请求中实际获得签名时我并不知道。所以现在我的新问题......

我如何配置 WCF 客户端以提供 SSL 客户端证书并签署 SOAP header ?

var myBinding = new BasicHttpBinding();
myBinding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;

这将导致 header 具有已签名的时间戳。但是,不再提供客户端证书,我也没有通过 SSL。如果我将第二行更改为:

myBinding.Security.Mode = BasicHttpSecurityMode.Transport;

然后我通过了 SSL,但我的 SOAP header 不再具有签名 block 。

有什么方法可以获取 HttpWebRequest,以便我可以像这样手动附加 SSL 客户端证书?

webRequest.ClientCertificates.Add(certLoader.Load(@"c:\somecert.pfx"));

原始问题

我正在开发一个 WCF 客户端,该客户端需要与第三方提供的服务互操作,该第三方使用 Forum Sentry 网络设备来保护访问。它们需要 SSL 和传输级别的客户端证书,以及带有在 header 中使用证书的签名的 o:Security 元素。我能够通过标准绑定(bind)实现一个或另一个,但我似乎无法同时实现这两个目标。理想情况下,他们希望使用与 SSL 客户端证书不同的证书对消息进行签名,但他们说我们可以使用相同的证书进行 SSL 客户端身份验证和对消息进行签名。

我愿意在这一点上做任何事情来让它工作,包括在必要时使用 CustomBinding。

我可以使用以下方法使 SSL 部分正常工作:

var myBinding = new BasicHttpBinding();
myBinding.Security.Mode = BasicHttpSecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
var url = "https://blah.com/services/somservice";
EndpointAddress ea = new EndpointAddress(url);
var client = new SoapClient(myBinding, ea);
var certLoader = new CertificateLoader("password");
client.ClientCredentials.ClientCertificate.Certificate = certLoader.Load(@"c:\somecert.pfx");
var resp = client.somemethod(ref profile, new RequestType { version = RequestTypeVersion.Item100 });

最佳答案

请发布一个示例工作肥皂(例如供应商提供的肥皂)。顺便说一句,有比使用自定义绑定(bind)更激烈的举动 :)

编辑:要同时使用传输和消息安全性,您需要自定义绑定(bind)。谷歌“wcf 绑定(bind)转换器”自动执行此操作。在自定义绑定(bind)而不是 http 元素中将其更改为 https 并使用属性 requirevlientcertificate。对不起拼写我在移动

编辑:

var c = new CustomBinding();            
MessageSecurityVersion version = MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
var sec = SecurityBindingElement.CreateCertificateOverTransportBindingElement(version);
c.Elements.Add(sec);
c.Element.Add(new TextMessageEncodingBindingElement() { MessageVersion = MessageVersion.Soap11 };)
c.Elements.Add(new HttpsTransportBindingElement() { RequireClientCertificate = true });

关于.net - 如何使用带有客户端证书的 HTTPS 传输使用证书对 WCF 消息进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688819/

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