我试图将现有的应用程序迁移到Mono(v2.10.2)。Mono的WCF证书安全性
因此我创建了一个带有BasicHttpBinding和消息安全性的测试WCF服务。客户端与.NET完美协作,但在使用Mono运行时失败。
客户端工厂被实例如下:
//var certificate = CertificateUtil.GetCertificate(StoreLocation.LocalMachine,
// StoreName.My, X509FindType.FindBySubjectDistinguishedName, CertName, true);
var certificate = new X509Certificate2("certificate.pfx", "password");
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Message;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
var epa = new EndpointAddress(
new Uri("http://localhost:53076/Service1.svc"),
new X509CertificateEndpointIdentity(certificate));
var factory = new ChannelFactory<IService1>(binding, epa);
factory.Credentials.ServiceCertificate.DefaultCertificate = certificate;
factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
factory.Credentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;
factory.Credentials.ClientCertificate.Certificate = certificate;
var client = factory.CreateChannel();
在单声道应用程序内CreateChannel抛出异常失败:
System.InvalidOperationException:绑定不支持任何类型的信道的合同'IService1'允许。
我调试成单声道源代码,发现问题是AsymmetricSecurityBindingElement.InitiatorTokenParameter == null。
我是新来的单声道,也许你可以指向我的文档/教程涵盖了这个话题。
UPDATE:
随着konrad.kruczynski现在证书对象拥有私有密钥的帮助。例外情况仍然如此。所以这不是证书商店问题。
也许有人可以指点我一个更好的阅读证书的方法,而不是在证书存储中搜索证书。从pfx文件中读取它们对于我的目的来说是完美的。 –
请看我更新的帖子。 –
我会认为这是一个错误。值得添加到bugzilla,他们有时快速修复。 –