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

本文关键字:SHA-1 之间 SHA-2 | 更新日期: 2023-09-27 18:11:07

我的程序使用SHA-1证书进行SSL连接。SHA-2证书现在已经被一些网络服务(Gmail)广泛使用。这将导致在电子邮件通知设置期间阻止与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);
}

我不能用这个代码发送电子邮件,我不想让"不安全的应用程序"进入我的gmail帐户。

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

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

SHA-1 vs. SHA-2与您遇到的问题完全无关。谷歌认为"不太安全的应用程序"是指不使用OAuth 2.0进行身份验证(这将允许双因素身份验证),而是只使用简单密码的应用程序。有关详细信息,请参阅新的安全措施将影响较旧的(非oauth 2.0)应用程序。

关于在c#中使用OAuth 2.0,请参见SMTP和OAuth 2

虽然,SHA1比MD5更能抵抗碰撞攻击,但它的性能一年比一年弱。因此,google鼓励从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备注:

框架在创建SSL会话时缓存会话,并尝试在可能的情况下为新请求重用缓存的会话。当尝试重用SSL会话时,框架使用ClientCertificates的第一个元素(如果有),或者如果ClientCertificates为空,则尝试重用匿名会话。