Как я могу вызвать HTTPS-сайт из функции Azure, используя определенный сертификат для установления HTTPS-соединения?
У меня есть функция Azure, которая должна взаимодействовать с удаленным сервером с сертификатом.Удаленный сервер - это банк.
При установке сертификата и локальном запуске запускается эмулятор функций Azure и выполняется соединение.
При загрузке в Azure я получаю это сообщение
The SSL connection could not be established, see inner exception. Authentication failed, see inner exception.
Я попытался включить сертификат в SLL функции Azure. Я установил все сертификаты в цепочке сертификатов в виде общедоступных сертификатов (.cer) изакрытый сертификат (.pfx)
Попытка получить сертификат с отпечатком не удалась.
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certificates = store.Certificates;
foreach (var certificate2 in certificates)
{
if (certificate2.Thumbprint.ToLower() == thumbprint.ToLower())
{
return certificate2;
}
}
}
В этом случае я пытаюсь использовать цикл вместо того, чтобы искать сертификат с помощью встроенной функции, чтобы найти Cert с помощьюОтпечаток
Когда это не сработало, я предоставил сертификат (.pfx) в виде файла.
Получение сертификата работает.
certificate = new X509Certificate2(filename, password, X509KeyStorageFlags.MachineKeySet);
X509KeyStorageFlags.MachineKeySet необходим вФункция Azure, но не при запуске локального эмулятора функций Azure
RestSharp работает в эмуляторе функций Azure
var client = new RestClient(BaseUrl)
{
Timeout = 180000,
ClientCertificates = new X509CertificateCollection() { cert }
};
client.AddDefaultHeader("Content-type", "application/json");
var request = new RestRequest(Query, Method.POST);
request.Parameters.Clear();
request.AddParameter("application/json", jsonSwish, ParameterType.RequestBody);
IRestResponse response = await client.ExecuteTaskAsync(request);
Я получаю сообщение «Не удалось установить соединение SSL ...»
Я добавил это до создания Клиента, но это не решило проблему
ServicePointManager.Expect100Continue = true;
ServicePointManager.DefaultConnectionLimit = 9999;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Затем я создал простой PHP с HTTPна входе и создает выход HTTPS с CURL и необходимым сертификатом в качестве параметров для CURL.Это работает, но это уродливое решение.
Как я могу вызвать HTTPS-сайт из функции Azure, используя специальный сертификат для установления HTTPS-соединения?