2011-10-27 87 views
1

解决了我与XMLRPC.NET + HTTPs相关的问题后,我用这个XMLRPC客户端/服务器样本解决方案在Windows上做了一些成功的测试,但无法让客户端(在Mono Linux上运行)连接到服务器(在Windows 7上运行)。我正在使用自己生成的证书进行测试(无论是在客户端还是在服务器端),但它在Linux上不适用于客户端。Mono C#HTTPs(XMLRPC.NET)失败:客户端证书或服务器证书问题?

正如你所看到的,客户端代码生成上启动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

有没有人有什么想法?非常感谢你。

回答

0

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

更长回答

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

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

+0

嗨,谢谢,poupou。所以如果我理解的很好,在Mono上,我需要创建一个PKCS文件(使用makecert?),然后使用'X509Certificate2'类加载这个文件? – virrea

+0

Mono的makecert可以创建PKCS#12文件。旧版本(不确定更新版本)的Microsoft makecert不能。但是**是**一旦您获得了PKCS#12文件,那么您将可以使用'X509Certificate2'来读取它(使用可选的密码来保护私钥) – poupou