You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 使用RestSharp加载PEM证书发起请求SSL连接失败如何解决

RestSharp 客户端证书SSL连接问题修复方案

你的代码存在2个核心的常见配置错误,是导致SSL握手失败的主要原因:

1. 证书加载逻辑缺陷

X509Certificate2.CreateFromPemFile方法直接生成的证书实例,私钥默认存储在临时内存区域,添加到ClientCertificates集合后,底层HTTP客户端握手时无法读取私钥,会直接触发SSL连接失败,这个问题在Windows环境下出现概率极高。

2. 缺少SSL校验兼容配置

如果目标接口使用的是自签名证书、证书过期或者不在系统信任链内,默认的证书校验逻辑会直接拦截连接请求。

修复后代码

using System;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using RestSharp;

namespace APICALL
{
    class Program
    { 
        static void Main()
        {
            // 测试环境如果是自签证书,可临时关闭证书校验,生产环境请删除这段配置
            ServicePointManager.ServerCertificateValidationCallback = 
                (sender, certificate, chain, sslPolicyErrors) => true;
            
            var client = new RestClient("https://placewherethecallisgoing.com");

            // 修复证书加载逻辑:Pem加载后转PFX重新导入,确保私钥可被访问
            var cert = X509Certificate2.CreateFromPemFile(@"C:\certificatefilepath\certificate.pem", @"C:\keyfilepath\keyfile.key");
            var certForHandshake = new X509Certificate2(cert.Export(X509ContentType.Pfx));
            
            client.ClientCertificates = new X509Certificate2Collection(){ certForHandshake };
            client.Timeout = -1;

            var request = new RestRequest(Method.POST);
            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("application/json", "{\"query\":\"\",\"variables\":{}}",ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);
            // 建议先打印错误信息排查问题
            if(response.ErrorException != null)
            {
                Console.WriteLine("请求错误:" + response.ErrorMessage);
                Console.WriteLine("异常详情:" + response.ErrorException);
            }
            Console.WriteLine("API Response:" + response.Content);
        }
    }
}

额外排查项

  • 确认运行程序的系统账号,有证书和密钥文件的读取权限
  • 先通过Postman、curl等工具导入同一份证书请求接口,确认证书本身有效、接口侧配置正常
  • 如果你使用的是RestSharp 107+版本,底层改为HttpClient实现,证书配置逻辑略有不同,可直接将处理好的证书传给HttpClientHandler再传入RestClient构造函数即可

内容的提问来源于stack exchange,提问作者ServetusSizedDuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 18:48:03