I have a p12 certificate, that I load it in this way:
X509Certificate2 certificate = new X509Certificate2(certName, password,
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet |
X509KeyStorageFlags.Exportable);
It is loaded correcty, in fact If i do certificate.PrivateKey.ToXmlString(true);
it returns a complete xml without errors.
But If I do:
try
{
X509Chain chain = new X509Chain();
var chainBuilt = chain.Build(certificate);
Console.WriteLine("Chain building status: "+ chainBuilt);
if (chainBuilt == false)
foreach (X509ChainStatus chainStatus in chain.ChainStatus)
Console.WriteLine("Chain error: "+ chainStatus.Status);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
it writes:
Chain building status: False
Chain error: RevocationStatusUnknown
Chain error: OfflineRevocation
so when I do:
ServicePointManager.CheckCertificateRevocationList = false;
ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;
ServicePointManager.Expect100Continue = true;
Console.WriteLine("connessione a:" + host);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(host);
req.PreAuthenticate = true;
req.AllowAutoRedirect = true;
req.ClientCertificates.Add(certificate);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "login-form-type=cert";
byte[] postBytes = Encoding.UTF8.GetBytes(postData);
req.ContentLength = postBytes.Length;
Stream postStream = req.GetRequestStream();
postStream.Write(postBytes, 0, postBytes.Length);
postStream.Flush();
postStream.Close();
WebResponse resp = req.GetResponse();
the server says that the certificate is not sent/valid.
My question is:
- how can I sent the certificate even with chain build false?
- there is another class to post a certificate that does not check the certificate validation before send it?
many thanks. Antonino
req.ClientCertificates.Add(certificate);
the connection log is the same in fiddler...so looks like this line is not useful. – Albedoreq.ClientCertificates.Add(certificate);
in my command-line program but it throws an exception. See if you can create a command-line program with the same code to see if at least the exported pfx certificate works. I've provided the modified code as an answer below. Also, if you're getting an exception please provide the stack trace. – Forespent