Закрытый ключ в RequestContext.ClientCertificate всегда NULL - PullRequest
0 голосов
/ 30 апреля 2019

Нам нравится реализовывать аутентификацию по сертификату в нашем приложении Web API, которое находится на нашем сервере IIS.

Наш клиент только что дал нам свой закрытый ключ, и они получат доступ к нашему веб-API с SSL-сертификатом клиента, который включает их закрытый ключ в формате PEM.Нам нужно извлечь закрытый ключ из сертификата клиента SSL, который включен в запрос веб-API, и проверить, соответствует ли он предоставленному им закрытому ключу.

Я реализовал приведенный ниже код

        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 .Код точно такой же, как указано выше, а разница ONLY для нижеуказанного состоит в том, что PEM отправляется через Web API.Примечание. Мы попытались отправить PEM через API-инструмент (Paw / Postman)

Код веб-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");

Есть идеи?

...