RequestContext.ClientCertificate中的私钥始终为NULL

时间:2019-04-30 16:20:17

标签: c# asp.net-web-api ssl-certificate private-key client-certificates

我们希望在IIS服务器上的Web API应用程序上通过证书实现身份验证。

我们的客户只是给了我们他们的私钥,他们将使用SSL客户证书访问我们的Web API,其中包括他们的PEM格式的私钥。我们需要从Web API请求中包含的SSL客户端证书中提取私钥,并检查它是否与它们提供的私钥匹配。

我实现了以下代码

        string fileLocation = @"E:\\pem_file_in computer.pem";

        string privateKeyFromFile = System.IO.File.ReadAllText(@"E:\\private_key_file.key");

        StreamReader sr = new StreamReader(fileLocation);

        PemReader pr = new PemReader(sr);

        AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject();

        var writer = new StringWriter();
        var pemWriter = new PemWriter(writer);
        pemWriter.WriteObject(KeyPair.Private);

        string extractedKey = writer.ToString();

        if (extractedKey == privateKeyFromFile))
            Console.Write("matched");
        else
            Console.Write("not matched");

并且它有效:)

但是,当我尝试在Web API上执行相同的操作时,它不起作用。我们尝试提取的私钥始终为NULL 。代码与上面的代码完全相同,下面的唯一区别是PEM是通过Web API发送的。 注意:我们尝试通过API工具(Paw / Postman)发送PEM

用于提取私钥的Web API的代码,如下所示:

        X509Certificate2 clientCertInRequest = RequestContext.ClientCertificate; 

        StreamReader sr = new StreamReader(new MemoryStream(clientCertInRequest.RawData));

        PemReader pr = new PemReader(sr);

        AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject();

        var writer = new StringWriter();
        var pemWriter = new PemWriter(writer);
        pemWriter.WriteObject(KeyPair.Private);

        string extractedKey = writer.ToString();

        if (extractedKey == privateKeyFromFile))
            Console.Write("matched");
        else
            Console.Write("not matched");

有什么主意吗?

0 个答案:

没有答案