c# – 解决WCF错误:EncryptedKey子句未包含所需的加密令牌“System.IdentityModel.Tokens.X509SecurityToken”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 解决WCF错误:EncryptedKey子句未包含所需的加密令牌“System.IdentityModel.Tokens.X509SecurityToken”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1880字,纯文字阅读大概需要3分钟。
内容图文
我有一个WCF客户端崩溃的错误“加密的KateyKey子句没有包含所需的加密令牌’System.IdentityModel.Tokens.X509SecurityToken’.”对于每一个回应.
我环顾四周,this blog post似乎表明问题出在我的证书设置上,但我不确定我做错了什么…
我的客户端使用带有MutualCertificateBindingElement的自定义绑定来保证安全性,我在代码中配置证书如下:
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.ChainTrust;
client.ClientCredentials.ServiceCertificate.SetDefaultCertificate
(
StoreLocation.CurrentUser,
StoreName.AddressBook,
X509FindType.FindBySerialNumber,
"[serial number 1]"
);
client.ClientCredentials.ClientCertificate.SetCertificate
(
StoreLocation.CurrentUser,
StoreName.My,
X509FindType.FindBySerialNumber,
"[serial number 2]"
);
序列号与< X509SerialNumber>中的值匹配.请求和响应消息中的元素.
我注意到的一个差异是< X509IssuerName>请求和响应中的元素格式不同:
Request: CN=[CN], O=[O], L=[L], C=[C]
Response: C=[C],L=[L],O=[O],CN=[CN]
这是否可能导致问题?
UPDATE
原来是导致问题的证书名称格式.我设法通过使用自定义编码器将响应中的证书名称替换为WCF所期望的来解决它.现在我有这个丑陋的黑客,但它确实有效,所以我会忍受它!
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
var msgContents = new byte[buffer.Count];
Array.Copy(buffer.Array, buffer.Offset, msgContents, 0, msgContents.Length);
bufferManager.ReturnBuffer(buffer.Array);
var message = Encoding.UTF8.GetString(msgContents);
// Fix certificate issuer name formatting to match what WCF expects.
message = message.Replace
(
"C=[C],L=[L],O=[O],CN=[CN]",
"CN=[CN], O=[O], L=[L], C=[C]"
);
var stream = new MemoryStream(Encoding.UTF8.GetBytes(message));
return ReadMessage(stream, int.MaxValue);
}
解决方法:
您提到的发行人名称顺序很可能是问题.由于这些名称未签名,我建议您在客户端编写一个自定义编码器,用于替换响应中的名称,以便在请求中进行格式化.
内容总结
以上是互联网集市为您收集整理的c# – 解决WCF错误:EncryptedKey子句未包含所需的加密令牌“System.IdentityModel.Tokens.X509SecurityToken”全部内容,希望文章能够帮你解决c# – 解决WCF错误:EncryptedKey子句未包含所需的加密令牌“System.IdentityModel.Tokens.X509SecurityToken”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。