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

Mono C#HTTPs(XMLRPC.NET)失败:客户端证书还是服务器证书问题?,c#,https,mono,xml-rpc,x509certificate,C#,Https,Mono,Xml Rpc,X509certificate,在解决了与的相关问题后,我使用此XMLRPC客户端/服务器示例解决方案在Windows上进行了一些成功的测试,但无法使客户端(在Mono Linux上运行)连接到服务器(在Windows 7上运行)。当然,我使用自己生成的证书进行测试(在客户端和服务器中),但它不适用于Linux上的客户端 如您所见,客户端代码在启动时生成X509证书: System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy

在解决了与的相关问题后,我使用此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;
System.Net.ServicePointManager.CertificatePolicy=new TrustAllCertificatePolicy();
IStateName proxy=xmlrpcproxy.Create();
XmlRpcClientProtocol cp=(XmlRpcClientProtocol)代理;
cp.Url=”https://127.0.0.1:5678/";
cp.ClientCertificates.Add(新的System.Security.Cryptography.X509Certificates.X509Certificate(@“C:\path\to\your\certificate\file\my.cer”);
cp.KeepAlive=false;
它被设计为接受所有证书,甚至是不可信的证书。但尽管如此,它仍然不起作用

另外,一些使用wget的测试显示
wgethttps://www.google.com/
成功联系并下载证书,但在我使用
wget的情况下不成功https://192.168.1.3:5678/
,即使使用
——无支票证书


有人知道发生了什么事吗?非常感谢。

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

更长的答案

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


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

您好,谢谢,poupou。因此,如果我理解得很好,我需要在Mono上创建一个PKCS文件(使用makecert?),然后使用
X509Certificate2
class?Mono的makecert可以创建PKCS#12个文件。Microsoft makecert的较旧(不确定是否为较新)版本无法运行。但是是的,一旦您获得PKCS#12文件,您就可以使用
X509Certificate2
读取它(使用可选密码保护私钥)