private bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { return(true); } string certificateIssuer = certificate.Issuer; lock (_syncObj) { if (trustedCertificateIssuersContainer.TrustedCertificateIssuers != null && trustedCertificateIssuersContainer.TrustedCertificateIssuers.Contains(certificateIssuer)) { return(true); } var request = sender as HttpWebRequest; string server = request == null ? null : " \"" + request.Address.Host + "\""; string msg = string.Format("{0} cannot verify the identity of the server{1}, due to a certificate problem. the server could be trying to trick you. Would you like to continue to the server?" + "\r\n\r\nCertificate: {2}" + "\r\n\rSSL error: {3}", ProgramInfo.Name, server, certificate, sslPolicyErrors); var showCertificateButton = new Button() { Text = "Show certificate", Width = 100 }; showCertificateButton.Click += (s, e) => { var x509Certificate2 = new X509Certificate2(certificate); X509Certificate2UI.DisplayCertificate(x509Certificate2); }; string btnContinueAnyWay = "Continue Anyway"; string btnAddToExclusionInThisSession = "Add to exclusion in this session"; string btnCancel = "Cancel"; var pressedButton = AdvancedMessageBox.Show(msg, "Invalid certificate", showCertificateButton, MessageBoxIcon.Warning, btnContinueAnyWay, btnAddToExclusionInThisSession, btnCancel); if (pressedButton == btnContinueAnyWay) { return(true); } else if (pressedButton == btnAddToExclusionInThisSession) { var trustedCertificateIssuers = trustedCertificateIssuersContainer.TrustedCertificateIssuers; if (trustedCertificateIssuers == null) { trustedCertificateIssuers = new HashSet <string>(); } trustedCertificateIssuers.Add(certificateIssuer); trustedCertificateIssuersContainer.TrustedCertificateIssuers = trustedCertificateIssuers; return(true); } } return(false); }