如何在使用SHA-2而不是SHA-1之间切换?

时间:2015-09-04 12:06:30

标签: c# ssl sha

我的程序使用SHA-1证书进行SSL连接。现在,某些Web服务(Gmail)已广泛使用SHA-2证书。这会导致在电子邮件通知设置期间阻止与SMTP服务器的传入连接。

要发送电子邮件,我使用像这样的SmtpClient

using (var smtpClient = new SmtpClient(serverSettings.SmtpServerName, (int)serverSettings.SmtpPort))
{
     smtpClient.EnableSsl = serverSettings.SmtpUseSsl;
     smtpClient.UseDefaultCredentials = false; 

     if (!string.IsNullOrEmpty(serverSettings.UserName) || !string.IsNullOrEmpty(serverSettings.EncryptedPassword))
     {
          smtpClient.Credentials = new NetworkCredential(serverSettings.UserName, serverSettings.EncryptedPassword);
     }
                ...
      smtpClient.Send(message);
}

我无法使用此代码发送电子邮件,但我不想允许“安全性较低的应用”#34;在我的Gmail帐户中。

如何为电子邮件通知实施或切换到SHA-2证书?

2 个答案:

答案 0 :(得分:9)

SHA-1与SHA-2完全无关。 "不太安全的应用程序"谷歌认为不使用OAuth 2.0进行身份验证的应用程序(这将允许双因素身份验证),而只是一个简单的密码。有关详细信息,请参阅New Security Measures Will Affect Older (non-OAuth 2.0) Applications

将OAuth 2.0与C#一起使用时,请参阅SMTP and OAuth 2

答案 1 :(得分:3)

虽然SHA1比MD5更能抵抗碰撞攻击,但每年都会变弱。因此,谷歌鼓励从SHA-1迁移到SHA-2 / SHA-3。

我认为您应首先获得SHA-2证书,然后使用以下示例代码为SMTPClient设置它:

string certificate = "Certificate.cer";

X509Certificate cert = new X509Certificate2(certificate);

MailMessage message = new MailMessage(from, to);

SmtpClient client = new SmtpClient(server);

client.ClientCertificates.Add(cert);

client.Send(message);

还要注意MSDN SmtpClient.ClientCertificates remarks

  

如果可能,框架会在创建SSL会话时对其进行缓存,并尝试将缓存会话重新用于新请求。尝试重用SSL会话时,Framework使用ClientCertificates的第一个元素(如果有),或者如果ClientCertificates为空,则尝试重用匿名会话。