TLS1.2を使用するように.NETWebサービスを更新します


99

.NET WebサービスからTLS1.2を強制する別のWebサービスに接続するには、TLS1.2を使用する必要があります。.NET4.6はデフォルトでTLS1.2を使用しているため、最も簡単な解決策のように聞こえるというリソースを見つけました。サーバー上の.NETFrameworkを更新し、再起動しました。IISでは、.NET 4.6を使用してアプリケーションプールを作成しようとしましたが、4.0が唯一のオプションでした。次に、4.6は.NET 4.0の「インプレース」アップデートであるため、4.0と表示されるというものを見つけました。だから多分終わったと思った。しかし、関係のない理由で表示されたエラーページに、Microsoft .NET Framework Version:4.0.30319アップグレードに成功していないようと表示されました。アプリケーションプールが.NET4.6を使用していることを確認する方法、またはより一般的にはTLS 1.2を有効にする方法に関する指針はありますか?


4
サーバーでTLS12を有効にする必要があると思います。support.quovadisglobal.com/kb/a433/...
lcryder

4
なぜ反対票を投じるのですか?
nasch 2017

回答:


139

実際には、.NET Webサービスを4.6にアップグレードして、TLS1.2を許可しました。

アルテムが言っていることは、私たちが行った最初のステップでした。Webサービスのフレームワークを4.6に再コンパイルし、レジストリキーを変更してTLS 1.2を有効にしようとしましたが、これは機能しませんでした。接続はまだTLS1.0のままでした。また、マシン上でSLL 3.0、TLS 1.0、またはTLS1.1を禁止したくありませんでした。他のWebサービスがこれを使用している可能性があります。レジストリの変更をロールバックしました。

実際にWeb.Configファイルを変更して、IISに「ねえ、4.6で実行してください」と伝えました。

.NET4.6のweb.config +再コンパイルで追加した変更は次のとおりです。

<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でWebサービスを実行しており(明示的に通知)、4.6がデフォルトでTLS1.2を使用しているためです。


3
調査に使用したドキュメントは次のとおりです。HTTPRuntimeRenderingCompatibility
Etienne

1
私はそれを理解しました-私はHTTPSを要求していませんでした。それを修正した後、それは機能しました。
nasch 2017

3
この場合、コンパイルを4.6に変更し、httpRuntime 4.6を追加するだけで十分でした。ソリューションに感謝します!
krilovich

2
これは完全に正しい答えです。最近これを経験しました。これに関するブログ投稿は次のとおりです:blog.thelevelup.com/pci-security-is-your-restaurant-readyおよびこれを行うGitHubプロジェクト:github.com/TheLevelUp/pos-tls-patcher
user24601


88

Webサービスクライアントをインスタンス化する前に、次のコードを追加します。

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

または、TLS1.1以前との下位互換性のために:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; 

2
ええ、私はすでにそれを行っていますが、エラーメッセージはまだ.NET4.0を示しています。
nasch 2017

12
それがCLRバージョンです。.Net CLRには、2.0と4.0の2つのバージョンがあります。IISでは、フレームワークのバージョンではなく、CLRのバージョンを指定します。IISは、.Net 4.6を気にしないため、.Net4.6を通知しません。4.6を使用してコンパイルした場合は、4.6を使用しています。
エイミー

2
TLS 1.2は、.NET 4.5以降でサポートされます
Gilberto Alexandre

5
この場合、| =は=よりも優れています。これらはバイナリフラグであり、他のすべてを不必要に上書きしないでください。
Izzy 2018

2
@ JohnWu-上記のIzzyのコメントに注意してください。コードは、HTTPSリソースに接続するときにTLS1.2のみを明示的に使用するように.NETに指示します。つまり、サーバーにTLS 1.1しかない場合、TLS 1.2しか使用していないため、コードによってサーバーの接続が停止されます。クライアントとサーバーが使用するプロトコルをネゴシエートするときに、| =を使用してコードに「オプションとしてTLS1.2も使用してみてください」と指示する必要があります。
ドン・チードル

27

4.5より前の.Netを使用している場合、列挙型にTls12が含まれないため、状態はここに明示的に記載されています

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

17

必要な3つのステップ:

  1. Enabled=0DisabledByDefault=1をレジストリに追加することにより、SSL2.0、TLS1.0、TLS1.1をサーバーマシンで禁止として明示的にマークします(フルパスはHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols)。詳細は画面をご覧ください レジストリ

  2. TLS1.21.の手順に従って、明示的に有効にします。Enabled=1とをDisabledByDefault=0それぞれ使用します。

注:サーバーのバージョンを確認してください:プロトコルをWindows Server 2003サポートしていませんTLS 1.2

  1. TLS1.2上記で提案した@JohnWuのように、アプリレベルでのみ有効にします。

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

このガイドがお役に立てば幸いです。

更新 @Subbuが述べたように:公式ガイド


1
公式リファレンス- technet.microsoft.com/en-us/library/...
Subbu

こんにちは@Artemtlsを追加した後、サーバーを再起動する必要がありますか?
シンバ

@Simbaあなたはおそらくこれを解決しましたが、今これを行うと、サーバーを再起動する必要はありませんでした。
マットN.

5

以下の私にとってはうまくいきました:

手順1: アプリケーションサーバーのhttps://www.microsoft.com/en-us/download/details.aspx?id=48137からWeb Installerexeをダウンロードしてインストールします。インストールが完了した後、アプリケーションサーバーを再起動しました。

ステップ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を完了した後、「WebFormsUnobtrusiveValidationModeには 'jquery'のScriptResourceMappingが必要です。jquery(大文字と小文字を区別する)という名前のScriptResourceMappingを追加してください」というエラーが発生しましたこのエラーを解決するために、appsettingsに以下のキーを追加しました。私のweb.configファイルで

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

httpRuntimeターゲットフレームワークを追加することは私のために働きました。
マークレッドマン

0

PowerBIEmbeddedにはTLS1.2が必要です。

EtienneFaucherによる上記の答えがあなたの解決策です。上記の回答へのクイックリンク...上記の回答へのクイックリンク...https://stackoverflow.com/a/45442874

PowerBIにはTLS1.2が必要です2020年6月-これがあなたの答えです-フレームワークから探しているデフォルトのTLS1.2の動作を強制するために、IISランタイムを強制的に最大4.6にすることを検討してください。上記の回答は、構成変更のみの解決策を提供します。

症状:Microsoft PowerBIEmbeddedへの強制的に閉じられた拒否されたTCP / IP接続が、システム全体で突然表示されます。

これらのPowerBI呼び出しは、ファイアウォールが接続をブロックするようなハードTCP / IPクローズエラーで機能しなくなります。通常、認証手順は機能します。特定のワークスペースのサービスにアクセスし、IDを報告すると、失敗します。

これは、必要なTLS1.2に関するMicrosoftPowerBIからの2020年のメモです。

PowerBIClient

この問題を示す方法

GetReportsInGroupAsync GetReportsInGroupAsAdminAsync GetReportsAsync GetReportsAsAdminAsync Microsoft.PowerBI.Api HttpClientHandler Force TLS 1.1 TLS 1.2

人々がこれを見つけるのに役立つ検索エラー用語:System.Net.Http.HttpRequestException:要求の送信中にエラーが発生しましたSystem.Net.WebException:基になる接続が閉じられました:送信時に予期しないエラーが発生しました。System.IO.IOException:トランスポート接続からデータを読み取れません:既存の接続がリモートホストによって強制的に閉じられました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.