Mono C#HTTPs(XMLRPC.NET)失败:客户端证书或服务器证书问题?

时间:2011-10-27 14:23:05

标签: c# https mono xml-rpc x509certificate

在解决了与XMLRPC.NET + HTTPs相关的问题后,我使用此XMLRPC客户端/服务器示例解决方案在Windows上进行了一些成功的测试,但无法让客户端(在Mono Linux上运行)连接到服务器(运行在Windows 7的)。我当然使用自生成的证书进行测试(在客户端和服务器上),但它不适用于Linux上的客户端。

如您所见,客户端代码在启动时生成X509证书:

System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
IStateName proxy = XmlRpcProxyGen.Create<IStateName>();
XmlRpcClientProtocol cp = (XmlRpcClientProtocol)proxy;
cp.Url = "https://127.0.0.1:5678/";
cp.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(@"C:\path\to\your\certificate\file\my.cer"));
cp.KeepAlive = false;

它旨在接受所有证书,甚至不受信任。但尽管如此,它仍然无效。

此外,使用wget进行的一些测试显示wget https://www.google.com/成功联系并下载了证书,但wget https://192.168.1.3:5678/不是--no-check-certificate,而是{{1}}。

有没有人知道发生了什么?非常感谢你。

1 个答案:

答案 0 :(得分:0)

快速回答:您的.cer文件不包含私钥,因此无法用于客户端证书。

更长的答案

那么它在Windows上如何运作? CryptoAPI将查询其证书存储,以查看是否存在与证书匹配的私钥。如果是,那么它将自动加载

它如何在Mono上运行?最简单的解决方案是创建一个加载 PKCS#12 文件的X509Certificate2实例(通常以.pfx或.p12为后缀)。该文件(如果生成正确)将包括X.509证书和私钥 - 允许Mono在此上下文中使用证书。