Как передать ключ и сертификат на языке c #

#c# #node.js #certificate #webrequest #ssg

#c# #node.js #сертификат #веб-запрос #ssg

Вопрос:

Привет, я видел демонстрационный код для использования API аутентификации сертификата с помощью node js.

 var https = require('https'),                  // Module for https
    fs =    require('fs');                     // Required to read certs and keys

    var options = {
       hostname: 'xxx',         
       path: '/courses/tags?sortBy=0',      
       method: 'GET',                   // Method : Get or POST
       key: fs.readFileSync('C://testNodeJs/key.pem'),      //Input the directory for key.pem
       cert: fs.readFileSync('C://testNodeJs/cert.pem')         //Input the directory for cert.pem
       //passphrase: 'InputPassWord'                        //Input the passphrase, please remember to put ',' End of Line for cert         
    };

    makeAPICall = function(response) {
       var str = '';    
       response.on('data', function (chunk) {
          str  = chunk;
       });

       response.on('end', function () {
          console.log(str);
       });
    }

https.request(options, makeAPICall).end();

            
  

Но наш проект использует только c #, поэтому я хочу знать, как мне отправить веб-запрос с сертификатом ключа и сертификата на C #?
Я пытаюсь использовать приведенный ниже код, но кажется неправильным

             var url1 = @"xxx";
            HttpWebRequest request1 = WebRequest.Create(url1) as HttpWebRequest;
            request1.Method = "GET";
            request1.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate("key.pem"));
            request1.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate("cert.pem"));
            
            // Get response
            using (HttpWebResponse response = request1.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());

                // Console application output
                var result = reader.ReadToEnd();
            }
  

Это выдает исключение «Система.Безопасность.Криптография.CryptographicException: «Не удается найти запрошенный объект»
большое спасибо

Ответ №1:

X509Certificate Класс не может прочитать ключ. Ключ также НЕ должен передаваться.

Используйте OpenSSL для объединения ключа и pem в файл PKCS # 12 / PFX и попробуйте это вместо:

 request1.ClientCertificates.Add(
  new X509Certificate2(
    "certAndKey.pfx", 
    password));
  

При использовании сертификата для MutualTLS (проверка подлинности сертификата клиента) могут быть некоторые требования к сертификату, поэтому убедитесь, что сертификат соответствует требованиям.