在解决了与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}}。
有没有人知道发生了什么?非常感谢你。
答案 0 :(得分:0)
快速回答:您的.cer文件不包含私钥,因此无法用于客户端证书。
更长的答案
那么它在Windows上如何运作? CryptoAPI将查询其证书存储,以查看是否存在与证书匹配的私钥。如果是,那么它将自动加载
它如何在Mono上运行?最简单的解决方案是创建一个加载 PKCS#12 文件的X509Certificate2
实例(通常以.pfx或.p12为后缀)。该文件(如果生成正确)将包括X.509证书和私钥 - 允许Mono在此上下文中使用证书。