Включение TLS 1.2 без изменения кода в .NET

У меня есть приложение .NET 4.5.2, которое использует SmtpClient для отправки электронных писем. Приложение установлено на сервере Windows 2012 R2. Когда я отключаю TLS 1 и TLS 1.1 и включаю только TLS 1.2, приложение перестает отправлять почту. Я думаю, это потому, что .NET 4.5.2 не поддерживает v1.2.

Я думаю о следующих шагах

1 ›Отключите TLS 1 и TLS 1.1 и включите только TLS 1.2 в Windows Server.
2› Установите .NET 4.8 на Windows Server.
3 ›Измените целевую структуру приложения на 4.8 (в csproj и в Интернете). .config) и перекомпилируйте.
4 ›Разверните приложение.

Вопросы
На основе документация Starting with .NET Framework 4.7.1, WCF defaults to the operating system configured version
1 ›Верно ли это только для WCF, или SMTP также будет по умолчанию использовать версию, настроенную в операционной системе?
2› или мне нужно указать версию явно, например System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
3 ›Можно ли установить версию TLS 1.2 прямо сейчас, а когда в будущем будет доступен TLS 1.3, приложение должно автоматически установить по умолчанию TLS 1.3? (Без повторного изменения кода)


person LP13    schedule 10.12.2020    source источник


Ответы (1)


Верно ли это только для WCF, или SMTP также будет по умолчанию настроен на версию операционной системы?

Нет, это относится ко всем Сетевые API .NET Framework, основанные на SslStream, который включает SMTP, а также HTTP и FTP.


или мне нужно явно указать версию, например System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Если вы компилируете свое приложение в .NET 4.7 или выше, вам не нужно устанавливать значение System.Net.ServicePointManager.SecurityProtocol, потому что оно будет установлено в SystemDefault, что означает, что оно унаследует протоколы безопасности по умолчанию от операционной системы или от любых пользовательских конфигураций, выполняемых системный администратор.


Можно ли установить версию TLS 1.2 прямо сейчас, и когда в будущем будет доступен TLS 1.3, приложение должно автоматически установить по умолчанию TLS 1.3?

Да, вам просто нужно проверить, установлено ли для System.Net.ServicePointManager.SecurityProtocol что-то еще, кроме SystemDefault (которое имеет значение 0 (ноль) в .NET 4.7+), и в этом случае вы можете установить его на TLS 1.2, чтобы переопределить его.

var securityProtocol = (int)System.Net.ServicePointManager.SecurityProtocol;

// 0 = SystemDefault in .NET 4.7+
if (securityProtocol != 0)
{
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
}
person C. Augusto Proiete    schedule 15.02.2021