#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 (проверка подлинности сертификата клиента) могут быть некоторые требования к сертификату, поэтому убедитесь, что сертификат соответствует требованиям.