我有一个小型测试控制台应用程序,用作WCF主机和另一个用作客户端的控制台应用程序。
客户端可以通过http访问主机,到目前为止一切正常。 但是当切换到https时,我收到以下错误:
Error: System.Net.WebException: Error: SendFailure (Error writing headers) --->
System.Net.WebException: Error writing headers --->
System.IO.IOException: The authentication or decryption has failed. --->
Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed.
...
到目前为止我试图解决这个问题的步骤:
我已将CA证书导入到机器商店中(如果我使用自签名证书,为什么需要这样做?)
sudo mozroots --import --machine --sync
我创建了一个用于测试的自签名证书(如Mono Security FAQ中所述)
makecert -r -eku 1.3.6.1.5.5.7.3.1 -n "CN=Cert4SSL" -sv cert.pvk cert.cer
我将它添加到单一证书商店
sudo certmgr -add -c -m Trust cert.cer
我还对其他商店(Root,My)进行了测试,也没有使用机器,但用户的商店 - 没有用,每次尝试时都出现同样的错误
我将服务使用的端口分配给证书
httpcfg -add -port 6067 -cert cert.cer -pvk cert.pvk
我添加了忽略证书验证
ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true;
这也没有帮助(但它被调用,证书对象在调试器中看起来很好)。
客户端使用此代码调用WebService:
IService svcClient2 = null;
string address2 = "https://localhost:6067/TestService";
BasicHttpBinding httpBinding2 = new BasicHttpBinding();
httpBinding2.TransferMode = TransferMode.Buffered;
httpBinding2.Security.Mode = BasicHttpSecurityMode.Transport;
httpBinding2.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
httpBinding2.MessageEncoding = WSMessageEncoding.Text;
httpBinding2.UseDefaultWebProxy = true;
ChannelFactory<IService> channelFac2 = new ChannelFactory<IService>( httpBinding2, new EndpointAddress( address2 ) );
svcClient2 = channelFac2.CreateChannel();
string res2 = svcClient2.TestHello( "Bob" ); // <----- this is where I get the exception
感谢任何帮助,我觉得自己喜欢圈赛。
关于环境的一些信息: 我使用的是Ubuntu 14.04 LTS和Mono 4.0.2,IDE是MonoDevelop
编辑:我现在用visual studio和C#构建了相同的项目,它按预期工作。客户端可以通过http和https连接到主机。 如果我将单声道版本复制到我的Windows机器上,我会遇到与Ubuntu相同的问题和错误消息。
这可能与单声道有关吗?