Обновите веб-службу .NET для использования TLS 1.2

Мне нужно использовать 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?

Ответ 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

Требуются три шага:

  1. Явно пометьте SSL2.0, TLS1.0, TLS1.1 как запрещенные на вашем сервере, добавив Enabled=0 и DisabledByDefault=1 в ваш реестр (полный путь - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols). Смотрите экран для деталей registry

  2. Явно включите TLS1.2, выполнив шаги из 1. Просто используйте Enabled=1 и DisabledByDefault=0 соответственно.

ПРИМЕЧАНИЕ. Проверьте версию сервера. Windows Server 2003 не поддерживает TLS 1.2

  1. Включите 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>