客户端证书始终为空

时间:2019-02-22 18:34:59

标签: c# security asp.net-core-webapi x509certificate x509certificate2

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

尝试使用以下代码将其发布到端点:

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");
    }

}

想知道是否有人曾经遇到过此问题,或者是否知道将证书发布到webapi端点并能够检索和验证的方法?

非常感谢

2 个答案:

答案 0 :(得分:0)

  1. 确保您使用的是真实IIS ,而不是表达
  2. 配置IIS,使其接受证书
  3. 在配置目录或活动目录中配置映射的证书
  4. 在浏览器中尝试请求,然后查看是否弹出证书选择对话框
    • 如果未根据HTTP错误子状态代码进行诊断
    • 如果要再次运行代码

答案 1 :(得分:0)

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

因此,我建议第一次在免费的证书授权中心(例如https://www.sslforfree.com/

)生成公共证书
相关问题