我的程序使用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证书?
答案 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为空,则尝试重用匿名会话。