C# 使用RestSharp根据请求添加证书

C# 使用RestSharp根据请求添加证书,c#,x509certificate,restsharp,C#,X509certificate,Restsharp,我正在尝试与服务器通信。此服务器向我发送证书和私钥,以便成功执行我的请求 为了测试服务器,我使用。 因此,我在postman中填写证书设置,我的请求工作正常 现在我想用C#做同样的事情 为此,我使用它来创建请求 这是我的密码 var client = new RestClient(url); byte[] certBuffer = UtilsService.GetBytesFromPEM(myCertificate, Models.Enum.PemStringType.Certifica

我正在尝试与服务器通信。此服务器向我发送证书和私钥,以便成功执行我的请求

为了测试服务器,我使用。 因此,我在postman中填写证书设置,我的请求工作正常

现在我想用C#做同样的事情

为此,我使用它来创建请求

这是我的密码

 var client = new RestClient(url);

 byte[] certBuffer = UtilsService.GetBytesFromPEM(myCertificate, Models.Enum.PemStringType.Certificate);
 byte[] keyBuffer = UtilsService.GetBytesFromPEM(encryptedPrivateKey, Models.Enum.PemStringType.RsaPrivateKey);

 X509Certificate2 certificate = new X509Certificate2(certBuffer, secret);
 client.ClientCertificates = new X509CertificateCollection() { certificate };
 var request = new RestRequest(Method.POST);
 request.AddHeader("Cache-Control", "no-cache");
 request.AddHeader("Accept", "application/json");
 request.AddHeader("Content-Type", "application/json");
 request.AddParameter("myStuff", ParameterType.RequestBody);
 IRestResponse response = client.Execute(request);
请求不起作用。我认为问题在于如何在RestSharp中加载证书

我正在寻找如何在RestSharp中正确设置证书的信息


我使用的是RestSharp,但我可以是其他任何可以在C#

中工作的东西好的,我得到了解决方案

首先,我必须停止使用证书的.crt和.key。我得去买一个.pfx。这可以通过openssl命令()完成

创建证书后,只需将其添加到请求中,如下所示

var client = new RestClient(url);

ServicePointManager.Expect100Continue = true;
ServicePointManager.DefaultConnectionLimit = 9999;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;

var certFile = Path.Combine(certificateFolder, "certificate.pfx");
X509Certificate2 certificate = new X509Certificate2(certFile, onboard.authentication.secret);
client.ClientCertificates = new X509CertificateCollection() { certificate };
client.Proxy = new WebProxy();
var restrequest = new RestRequest(Method.POST);
restrequest.AddHeader("Cache-Control", "no-cache");
restrequest.AddHeader("Accept", "application/json");
restrequest.AddHeader("Content-Type", "application/json");
restrequest.AddParameter("myStuff", ParameterType.RequestBody);
IRestResponse response = client.Execute(restrequest);

不知道您是否在使用它,但Postman有一个内置功能,您可以将请求导出到大多数已知语言。C#恰好是其中之一,它使用RestSharp库。只需单击屏幕右上角的代码按钮并选择c#。如果你已经知道这一点,这可能看起来很明显,对不起!是的,我已经用这种方法生成了代码。但它没有考虑到证书…明白了。对不起,我希望我能,但我不知道如何帮助你。+1对两个问答。我花了一个小时寻找一个简单的解决方案。最后,一些有用的东西。谢谢谢谢,谢谢,谢谢1000次谢谢。为了这个非常简单的解决方案,我花了好几个小时寻找和努力。在我添加了这行代码后,这项工作对我来说是可行的
System.Net.ServicePointManager.ServerCertificateValidationCallback+=(s,cert,chain,sslPolicyErrors)=>true-我希望这可能对其他人有用。
var client = new RestClient(url);

ServicePointManager.Expect100Continue = true;
ServicePointManager.DefaultConnectionLimit = 9999;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;

var certFile = Path.Combine(certificateFolder, "certificate.pfx");
X509Certificate2 certificate = new X509Certificate2(certFile, onboard.authentication.secret);
client.ClientCertificates = new X509CertificateCollection() { certificate };
client.Proxy = new WebProxy();
var restrequest = new RestRequest(Method.POST);
restrequest.AddHeader("Cache-Control", "no-cache");
restrequest.AddHeader("Accept", "application/json");
restrequest.AddHeader("Content-Type", "application/json");
restrequest.AddParameter("myStuff", ParameterType.RequestBody);
IRestResponse response = client.Execute(restrequest);