public class CertificateWebClient : WebClient { private readonly X509Certificate2 certificate; public CertificateWebClient(X509Certificate2 cert) { certificate = cert; } protected override WebRequest GetWebRequest(Uri address) { HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address); System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate X509certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors) { return true; }; request.ClientCertificates.Add(certificate); return request; } }
Now you can with self signed cert ! ("The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.; The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.;")
X509Certificate2 Cert = new X509Certificate2("client.p12", "1234", X509KeyStorageFlags.MachineKeySet); // Create a new WebClient instance. CertificateWebClient myWebClient = new CertificateWebClient(Cert); string fileName = Installation.destXML; string uriString = "https://xxxxxxx.xx:918"; // Upload the file to the URI. // The 'UploadFile(uriString,fileName)' method implicitly uses HTTP POST method. byte[] responseArray = myWebClient.UploadFile(uriString, fileName); // Decode and display the response. Console.WriteLine("\nResponse Received.The contents of the file uploaded are:\n{0}", System.Text.Encoding.ASCII.GetString(responseArray));