.net core Api Client Server сертификат аутентификации - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь выполнить основной вызов API .Net на основе проверки подлинности сертификата

СТОРОНА СЕРВЕРА

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args).UseStartup<Startup>()
    .ConfigureKestrel((context, options) =>
    {
        options.ConfigureHttpsDefaults(httpsOptions =>
        {
            httpsOptions.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
            httpsOptions.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
        httpsOptions.ClientCertificateValidation = (certificate2, validationChain, policyErrors) =>
        {
            string ServerCertificateFile = "myCertServer.pfx";
            string ServerCertificatePassword = null;
            var certificate = new X509Certificate2(ServerCertificateFile, ServerCertificatePassword);
            validationChain.ChainPolicy.ExtraStore.Add(certificate);

            var valid = validationChain.Build(certificate2);
            ...
            return valid;
        };
    });
});

СТОРОНА КЛИЕНТА

static async Task RunAsync()
{
    string ServerCertificateFile = "myCertClient.cer";
    string ServerCertificatePassword = null;
    var certificate = new X509Certificate2(ServerCertificateFile, ServerCertificatePassword);
    var handler = new HttpClientHandler();
    handler.ClientCertificateOptions = ClientCertificateOption.Manual;
    handler.SslProtocols = SslProtocols.Tls12;
    handler.CheckCertificateRevocationList = false;
    handler.ClientCertificates.Add(certificate);
    var httpClient = new HttpClient(handler);
    try
    {
        httpClient.DefaultRequestHeaders.Accept.Clear();
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var res =httpClient.GetAsync("https://localhost:5001/api/values").GetAwaiter().GetResult();
    }
    catch (Exception ex)
    {
        //the following exception is always thrown:
        //InnerException = {"The decryption operation failed, see inner exception."}
    throw;
    }
}

следующее исключениевсегда выбрасывается:

"Операция дешифрования не выполнена, см. внутреннее исключение"

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