Я пытаюсь выполнить основной вызов 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;
}
}
следующее исключениевсегда выбрасывается:
"Операция дешифрования не выполнена, см. внутреннее исключение"