I have a C# app, using HttpClient to connect to a remote server. The server owner has asked for Client Certificate authentication. I sent through the public key certificate to them, and loaded the .pfx certificate (which includes the private key) when I make the request.
I receive the following error:
The credentials supplied to the package were not recognized
I now load the server owners public key certificate into my Azure Certificate store, in the “Public key certificates” area, and it works.
Why does loading their certificate make any difference? I already needed to ignore server side validation, as we are connecting via an IP address, as opposed to a URL. This is the configuration:
var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback =
(httpRequestMessage, cert, cetChain, policyErrors) =>
{
return true;
};
handler.SslProtocols = SslProtocols.Tls12;
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
var certificate = new X509Certificate2(certificateData, password);
handler.ClientCertificates.Add(certificate);
using (var client = new HttpClient(handler))
{
...
}
So, how is adding the server certificate doing anything? What have I missed?