Мне нужно использовать TLS 1.2 для подключения моего веб-сервиса .NET к другому, который будет заставлять TLS 1.2. Я нашел ресурс, который сказал, что .NET 4.6 использует TLS 1.2 по умолчанию, так что это звучало как самое простое решение. Я обновил платформу .NET на сервере и перезапустил. В IIS я попытался создать пул приложений с использованием .NET 4.6, но единственным вариантом было 4.0. Затем я нашел то, что сказал, что он все равно скажет 4.0, потому что 4.6 - это обновление на месте .NET 4.0. Поэтому я подумал, что, возможно, я закончил. Однако на странице с ошибкой, которую я получил по несвязанным причинам, он сказал Microsoft .NET Framework Version:4.0.30319
, поэтому, похоже, я не был успешно обновлен. Любые указатели на то, как убедиться, что мой пул приложений использует .NET 4.6, или, более подробно, как включить TLS 1.2?
Обновите веб-службу .NET для использования TLS 1.2
Ответ 1
На самом деле мы просто обновили веб-службу .NET до 4.6, чтобы разрешить TLS 1.2.
Что Артем говорит, это были первые шаги, которые мы сделали. Мы перекомпилировали структуру веб-службы до 4.6, и мы попытались изменить раздел реестра, чтобы включить TLS 1.2, хотя это не помогло: соединение все еще было в TLS 1.0. Кроме того, мы не хотели запрещать SLL 3.0, TLS 1.0 или TLS 1.1 на машине: другие веб-службы могли бы использовать это; мы откатили наши изменения в реестре.
Мы фактически изменили файлы Web.Config, чтобы сообщить IIS: "Эй, запустите меня в 4.6, пожалуйста".
Здесь изменения, которые мы добавили в web.config + recompilation в .NET 4.6:
<system.web>
<compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
<!--Added this httpRuntime -->
<httpRuntime targetFramework="4.6" />
<authentication mode="Windows"/>
<pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>
И соединение изменилось на TLS 1.2, поскольку IIS теперь запускает веб-службу в 4.6 (явно сказано), а 4.6 использует TLS 1.2 по умолчанию.
Ответ 2
Добавьте следующий код, прежде чем создавать экземпляр клиента веб-службы:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Или для обратной совместимости с TLS 1.1 и ранее:
System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
Ответ 3
если вы используете.Net раньше, чем 4.5 вы не будете иметь Tls12 в перечислении так государство явно упоминается здесь
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
Ответ 4
Требуются три шага:
-
Явно пометьте SSL2.0, TLS1.0, TLS1.1 как запрещенные на вашем сервере, добавив
Enabled=0
иDisabledByDefault=1
в ваш реестр (полный путь -HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
). Смотрите экран для деталей -
Явно включите
TLS1.2
, выполнив шаги из 1. Просто используйтеEnabled=1
иDisabledByDefault=0
соответственно.
ПРИМЕЧАНИЕ. Проверьте версию сервера. Windows Server 2003
не поддерживает TLS 1.2
-
Включите
TLS1.2
только на уровне приложения, как @John Wu, предложенный выше.System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Надеюсь, это руководство поможет.
ОБНОВЛЕНИЕ Как @Subbu упомянул: Официальное руководство
Ответ 5
Для меня ниже работает:
Шаг 1. Загрузите и установите exe веб-установщика с https://www.microsoft.com/en-us/download/details.aspx?id=48137 на сервер приложений. Перезагрузил сервер приложений после завершения установки.
Шаг 2: Добавленные ниже изменения в web.config
<system.web>
<compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
<!--Added this httpRuntime -->
<httpRuntime targetFramework="4.6" />
</system.web>
Шаг 3: После выполнения шагов 1 и 2, он выдал ошибку: " WebForms UnobtrusiveValidationMode требует ScriptResourceMapping для" jquery ". Пожалуйста, добавьте ScriptResourceMapping с именем jquery (чувствительный к регистру) ", и чтобы устранить эту ошибку, я добавил ниже ключ в appsettings в моем файле web.config
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>