C# HttpClient с публичным доступом c и закрытым ключом - PullRequest
0 голосов
/ 20 марта 2020

Я работаю с приложением. NET Core 3.1, которое использует публичные c и закрытые ключи для выполнения SOAP запросов. Я написал скрипт Python для проверки того, что я собираюсь сделать, и он работает правильно:

import requests
cert_file_path = "C:\\certificates\\public.pem"
key_file_path = "C:\\certificates\\private.pem"

url = "https://test.example.net:4401/Service/Sample?wsdl"
cert = (cert_file_path, key_file_path)
r = requests.get(url, cert=cert)
print(r.content)  # prints WSDL with no issues

Я пытаюсь сделать то же самое, используя. NET Core и C#. Предположим, есть метод:

private HttpClient GetHttpClient()
{
var handler = new HttpClientHandler
            {
                ClientCertificateOptions = ClientCertificateOption.Manual,
                SslProtocols = SslProtocols.Tls12
            };
var clientCert = new X509Certificate2(
                File.ReadAllBytes(_configuration[AppSettingsKeys.PfxFileLocation]), string.Empty,
                X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
handler.ClientCertificates.Add(clientCert);
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
return new HttpClient(handler) {Timeout = TimeSpan.FromMinutes(5)};
}

При мониторинге запросов в Wireshark версия. NET Core возвращает «Bad Certificate» в ответе TCP. Короче говоря, есть ли простой способ повторить код Python в. NET Core? В приведенном ниже примере я использовал openssl для объединения двух сертификатов в файл PFX. Я также установил следующий пакет Nuget (OpenSSL.X509Certificate2.Provider), который может прикрепить закрытый ключ к сертификату, и он тоже не работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...