Http 请求的“证书验证”实践
一个小程序,Http请求突然没有返回数据,为此诊疗实践,特此记录:
一、网页浏览诊查
1.网页查看地址:输入网址后,网页地址栏提示不安全。
如下图
2.查看证书,该证书已经过期
二、代码调试诊查
代码运行提示错误信息如下:
三、解决办法
#region 设置安全协议,证书验证
/// 设置支持的ssl协议版本,这里勾选上常用的几个
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | (SecurityProtocolType)3072;
/// 设置服务器验证服务的回调允许请求
ServicePointManager.ServerCertificateValidationCallback += CheckValidationResult;
//载入网站的证书
string filePath = System.IO.Directory.GetCurrentDirectory() + "/fre.cer";
X509Certificate cert = new X509Certificate(filePath);
//将证书添加客户端证书集合
request?.ClientCertificates.Add(cert);
#endregion
private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true; //为了通过证书验证,总是返回true
}
经过为Http Request对象增加回调,问题得到解决!
四、步骤三的证书导出方法
以csdn.net为例,
- 第1步:输入网址,点地址栏最左侧标识
-
在弹出的窗体中选择证书项
-
证书窗体中选择详细信息项,并点击复制到文件按钮
-
按向导完成选择和导出,注意这里选用x.509
按向导完成证书保存即可。
特别提示
导出方法与在CSDN中的“导出https网站证书” 文描述相同,唯一不同的是导出的证书格式不同!