Мы пытаемся использовать остальные API в net ядре 2.2 с передачей сертификата и закрытого ключа в качестве параметра в запросе API получения.
Когда мы пытаемся использовать команду CURL для использования api работает как положено
curl -v -k --header 'Content-Type:application/json' --http1.1 --cert /home/test/test.com.crt --key /home/test/private.key 'https://test.com/testwebservice/api/Accounts?AppID=TestAppID&Safe=TestSafe&Username=TestUserNameFake'
, но мы пытаемся реализовать то же самое. Net Ядро 2.2 согласно приведенному ниже коду, получая ошибку, поскольку параметры не совпадают.
class Program
{
static async Task Main(string[] args)
{
await VisitHttps();
}
public static async Task<HttpResponseMessage> VisitHttps()
{
// Proceed for an invalid cerficate
ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => true;
// Add the certificate
var handler = new HttpClientHandler();
var cert = GetMyCert();
if (cert != null)
{
handler.ClientCertificates.Add(cert);
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.SslProtocols = System.Security.Authentication.SslProtocols.Tls11;
}
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
HttpClient cclient = new HttpClient(handler)
{
//BaseAddress = new Uri("https://someurl.com")
};
cclient.DefaultRequestHeaders.Accept.Clear();
cclient.DefaultRequestHeaders.Accept.Add(new
MediaTypeWithQualityHeaderValue("application/json"));
return await cclient.GetAsync("https://some-url.com/ping");
}
private static X509Certificate2 GetMyCert()
{
string currentLocation = $"{AppDomain.CurrentDomain.BaseDirectory}key-public.crt";
X509Store store = new X509Store("My", StoreLocation.CurrentUser);
X509Certificate2 cert;
cert = new X509Certificate2(File.ReadAllBytes(currentLocation), "private key", X509KeyStorageFlags.MachineKeySet);
bool result = cert.Verify();
var r2 = result;
return cert;
}
}