Check https url has valid certificate and is reachable in c#

Viewed 48

I have a window application made in c#, I need a code to check an https url is reachable and having a valid certificate then i need to display a MessageBox with validation successfully done elese respective error

    private void btnValidateSettings_Click(object sender, EventArgs e)
    {
        HttpClient httpClient = new HttpClient();
        try
        {
            string url = txtAAServerName.Text + "myApi";
            MessageBox.Show(url);

            string serverName = (chkBoxSSL.Checked == true) ? "https://" + txtAAServerName.Text : "http://" + txtAAServerName.Text;
            MessageBox.Show(serverName);
            var result = httpClient.GetAsync(serverName + "myApi");
            _log.Error("Error Result html"+result);
            MessageBox.Show("Validated Successfully!");
1 Answers

You can do that using HttpWebRequests.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"//PUT URL HERE//");
        request.ServerCertificateValidationCallback += OnCertificateValidation;
        try
        {
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Console.WriteLine("Response status: {0} ({1})", response.StatusCode, response.StatusDescription);
        }
        catch (WebException e)
        {
            Console.WriteLine("Exception: {0}", e.Message);
        }

        Console.ReadKey();

public static bool OnCertificateValidation(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
    {
        Console.WriteLine("Subject: {0}", certificate.Subject);
        Console.WriteLine("Effective date: {0}", certificate.GetEffectiveDateString());
        Console.WriteLine("Expiration date: {0}", certificate.GetExpirationDateString());
        Console.WriteLine("Issuer: {0}", certificate.Issuer);
        Console.WriteLine("Key algorithm: {0}", certificate.GetKeyAlgorithm());
        Console.WriteLine("Certificate hash: {0}", certificate.GetCertHashString());
        Console.WriteLine("Public key: {0}", certificate.GetPublicKeyString());
        Console.WriteLine("Serial number: {0}", certificate.GetSerialNumberString());
        Console.WriteLine("SSL policy errors: {0}", errors);
        return (errors == SslPolicyErrors.None);
    }

This returns Respone status OK (OK) if the site is reachable. Exception Remote couldnt be resolved if the site isnt reachable. And certificate informations if it is reachable and owns a certificate.

The code example is from this Link: https://jarrettmeyer.com/2017/10/19/validating-remote-server-certificates

Related