根据验证程序,远程证书无效。 GMAIL

问题描述:

下面的函数在控制台应用程序中工作,但它不在我的asp.net网站中工作。我收到一个错误: 根据验证程序,远程证书无效。根据验证程序,远程证书无效。 GMAIL

public static void SendEmail(MailMessage mm) 
{ 
    SmtpClient smtp = new SmtpClient(); 
    smtp.Host = "smtp.gmail.com"; 
    smtp.Port = 587; 
    smtp.EnableSsl = true; 
    smtp.Credentials = new NetworkCredential("[email protected]", "Pass"); 

    smtp.Send(mm); 
} 

您可以尝试处理证书验证事件,以便更容易确定远程证书被视为无效的原因。为此,调用SendEmail方法之前添加以下行:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate); 

然后提供ValidateServerCertificate实现,像

public bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
{ 
    // replace with proper validation 
    if (sslPolicyErrors == SslPolicyErrors.None) 
     return true; 
    else 
     return false; 
} 

通过ValidateServerCertificate所收到的参数应该给你关于为什么验证失败的细节(检查sslPolicyErrors)。您还可以访问远程证书和证书颁发机构链。

一种可能的情况是,您在与控制台应用程序不同的用户下运行网站,并且此用户不信任gmail证书的颁发者(或链中的中介机构)。如果您以某种方式从Windows证书存储中的本地计算机/受信任的根证书中删除了证书,则可能会发生这种情况。