我见过如何使用WebRequestHandler
和HttpClient
在我的http请求中嵌入证书的代码示例(请参阅下面的代码段)。但是,我刚用自签名证书对此进行了测试,但它无法正常工作。根据{{3}},如果没有可信证书,此方法将无效。
如果我通过浏览器或邮递员发送证书,我可以在服务器上看到证书,但不能以编程方式发送。
有人确认或拒绝HttpClient
或WebRequestHandler
执行任何类型的证书验证,然后才能将其作为请求的一部分发送吗?
快速反编译没有显示任何明显的内容,但请求管道中有很多内容在发挥作用。
示例代码:
var cert = new X509Certificate2(rawCert);
//This call fails, cannot check revocation authority.
//Specific error: The revocation function was unable to check
//revocation for the certificate.
//X509CertificateValidator.ChainTrust.Validate(cert);
var certHandler = new WebRequestHandler()
{
ClientCertificateOptions = ClientCertificateOption.Manual,
UseDefaultCredentials = false
};
certHandler.ClientCertificates.Add(cert);
var Certificateclient = new HttpClient(certHandler)
{
BaseAddress = new Uri("https://web.local")
};
var response = await Certificateclient.GetAsync("somepath");
答案 0 :(得分:0)
要使用自签名证书,您可以添加using System.Net.Security;
添加处理程序回调方法
public static bool ValidateServerCertificate(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
并在调用API之前设置:
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
见: