Как использовать остальные API в. Net Core 2.2 с передачей параметра в качестве сертификата и закрытого ключа - PullRequest
0 голосов
/ 29 марта 2020

Мы пытаемся использовать остальные 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;
    }
}
...