Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 客户端证书始终为空_C#_Security_Asp.net Core Webapi_X509certificate_X509certificate2 - Fatal编程技术网

C# 客户端证书始终为空

C# 客户端证书始终为空,c#,security,asp.net-core-webapi,x509certificate,x509certificate2,C#,Security,Asp.net Core Webapi,X509certificate,X509certificate2,我在个人和受信任的根证书颁发机构下安装了证书 已尝试使用此代码位发布到端点: public void Post() { try { var clientCert = LoadFromStore("MyThumbprint"); var requestHandler = new WebRequestHandler(); requestHandler.ClientCertificates

我在个人受信任的根证书颁发机构下安装了证书

已尝试使用此代码位发布到端点:

public void Post()
    {
        try
        {
            var clientCert = LoadFromStore("MyThumbprint");
            var requestHandler = new WebRequestHandler();

            requestHandler.ClientCertificates.Add(clientCert);

            var client = new HttpClient(requestHandler)
            {
                BaseAddress = new Uri("https://localhost:44430/")
            };

            var response = client.GetAsync("api/test").Result;
            response.EnsureSuccessStatusCode();

            string responseContent = response.Content.ReadAsStringAsync().Result;
            Console.WriteLine(responseContent);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception while executing the test code: {0}", ex.Message);
        }
    }
检查时,.ClientCertificate属性始终为空

 [Route("api/[controller]")]
public class TestController : Controller
{
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        var clientCertInRequest = Request.HttpContext.Connection.ClientCertificate;
        if (clientCertInRequest != null) return Ok();

        return BadRequest("No certificate found");
    }
[路由(“api/[控制器]”)]
公共类TestController:控制器
{
[HttpGet]
公共行动结果获取()
{
var clientCertInRequest=Request.HttpContext.Connection.ClientCertificate;
如果(clientCertInRequest!=null)返回Ok();
返回请求(“未找到证书”);
}
}

想知道是否有人以前遇到过这个问题,或者知道如何将证书发布到webapi端点并能够检索和验证

非常感谢

  • 确保您使用的是真正的IIS,而不是express
  • 配置IIS以使其接受证书
  • 在配置或active directory中配置映射的证书
  • 在浏览器中尝试该请求,并查看是否弹出证书选择对话框
    • 如果未根据HTTP错误子状态代码进行诊断
    • 如果是这样,请再次运行代码
  • 确保您使用的是真正的IIS,而不是express
  • 配置IIS以使其接受证书
  • 在配置或active directory中配置映射的证书
  • 在浏览器中尝试该请求,并查看是否弹出证书选择对话框
    • 如果未根据HTTP错误子状态代码进行诊断
    • 如果是这样,请再次运行代码

  • 您必须知道,服务器端的响应证书取决于证书类型/证书内容。 当我推送自签名证书(在IIS中本地生成)时,我也遇到了同样的问题:请求中的服务器上的证书始终为空。 但当我使用链层次结构推送普通(公共)证书时,我很惊讶,因为我收到了证书

    因此,我建议第一次在免费证书授权中心生成公共证书,例如

    • 另外我建议你看看MS的源代码模式和其他类


    您必须知道,服务器端响应证书取决于证书类型/证书内容。 当我推送自签名证书(在IIS中本地生成)时,我也遇到了同样的问题:请求中的服务器上的证书始终为空。 但当我使用链层次结构推送普通(公共)证书时,我很惊讶,因为我收到了证书

    因此,我建议第一次在免费证书授权中心生成公共证书,例如

    • 另外我建议你看看MS的源代码模式和其他类