xamarin.android adding client certificate

前端 未结 2 817
醉梦人生
醉梦人生 2021-01-07 10:12

I\'m trying to send a request to a web api in Xamarin.Android. The api requires a client certificate. I followed the advice in this question: xamarin.ios httpclient clientce

2条回答
  •  别那么骄傲
    2021-01-07 10:47

    If you refer to AndroidClientHandler Source Code, you can find following statement:

    AndroidClientHandler also supports requests to servers with "invalid" (e.g. self-signed) SSL certificates. Since this process is a bit convoluted using the Java APIs, AndroidClientHandler defines two ways to handle the situation. First, easier, is to store the necessary certificates (either CA or server certificates) in the collection or, after deriving a custom class from AndroidClientHandler, by overriding one or more methods provided for this purpose(, and ). The former method should be sufficient for most use cases...

    So, for usage of AndroidClientHandler you should use clientHandler.TrustedCerts together with Java.Security.Cert.X509Certificate:

    Java.Security.Cert.X509Certificate cert = null;
    try
    {
        CertificateFactory factory = CertificateFactory.GetInstance("X.509");
        using (var stream = Application.Context.Assets.Open("MyCert.pfx"))
        {
             cert = (Java.Security.Cert.X509Certificate)factory.GenerateCertificate(stream);
        }
        } catch (Exception e)
        {
             System.Console.WriteLine(e.Message);
        }
        if (clientHandler.TrustedCerts != null)
        {
             clientHandler.TrustedCerts.Add(cert);
        }
        else
        {
             clientHandler.TrustedCerts = new List();
             clientHandler.TrustedCerts.Add(cert);
        }
    

    Notes: don't use Application.Context.Assets.Open("ca.pfx").CopyTo(mmstream); otherwise you will get inputstream is empty exception.

提交回复
热议问题