【发布时间】:2021-03-28 02:58:10
【问题描述】:
我一直在调用需要“封装签名”作为转换算法的肥皂服务。我得到“xml-exc-c14n#”。我正在使用自定义绑定来初始化 WCF 请求的客户端。
更新: 在上面的示例中,我尝试不使用消息检查器。所以我尝试了两种方法。 1. 使用 WCF 调用,但我无法将转换算法更改为“包络签名”。 2. 我尝试使用 Inspector 创建签名的 XML 文档并将其添加到请求消息中。就像在这个例子中解释的那样Message inspectors- WCF call 我都失败了。
以下是我在没有 Inspector 的情况下用于 WCF 调用的代码
var b = new CustomBinding();
var sec = (AsymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement(MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10);
sec.EndpointSupportingTokenParameters.Signed.Add(new UserNameSecurityTokenParameters());
sec.MessageSecurityVersion =
MessageSecurityVersion.
WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12;
sec.IncludeTimestamp = false;
sec.MessageProtectionOrder = System.ServiceModel.Security.MessageProtectionOrder.SignBeforeEncrypt;
sec.DefaultAlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic256Sha256;
X509SecurityTokenParameters x509Params = new X509SecurityTokenParameters
{
X509ReferenceStyle = X509KeyIdentifierClauseType.IssuerSerial,
RequireDerivedKeys = false,
InclusionMode = SecurityTokenInclusionMode.Once,
ReferenceStyle = SecurityTokenReferenceStyle.Internal
};
((AsymmetricSecurityBindingElement)sec).InitiatorTokenParameters = x509Params;
b.Elements.Add(sec);
b.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));
b.Elements.Add(new HttpsTransportBindingElement() { });
如果您有任何想法,请帮助我。
【问题讨论】:
-
如果您的问题是对请求消息进行操作,可以参考:docs.microsoft.com/en-us/dotnet/framework/wcf/samples/…
-
@TheobaldDu 是的,这也是关于更改消息的。所以我确实使用了这个事件 BeforeSendRequest。但是我尝试用来替换现有请求(消息)的签名 xml 并未完全复制。因此,当我创建消息时,签名的 xml 字符串会发生变化。
-
@TheobaldDu 在上面的例子中,我在没有检查员的情况下尝试。所以我尝试了两种方式。 1. 使用 wcf 调用,但我无法将转换算法更改为“包络签名”。 2. 我尝试使用 Inspector 创建签名的 xml 文档并将其添加到请求消息中。我都失败了。
标签: c# wcf soap x509certificate custom-binding