「リクエストは中止され、SSL/TLS セキュア チャネルの作成に失敗しました」の理由と解決策
説明: リクエストが中止されました: SSL/TLS セキュア チャネルの作成に失敗しました。 SSL/TLS セキュア チャネルを作成できませんでした。
ビルド プラットフォーム: Windows Server 2012、Windows 7 Service Pack 1 (SP1)、および Windows Server 2008 R2 SP1
解決策 1:
HttpWebRequest の前にコードを設定します
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
解決策 2
- 上記の方法が機能しない場合は、システム レベルの問題です。現在使用しているシステムに応じてシステム パッチを更新してください。
Windows の WinHTTP の既定のセキュリティ プロトコルとして TLS 1.1 および TLS 1.2 を有効にする更新プログラム。この更新プログラムは、Windows Server 2012、Windows 7 Service Pack 1 (SP1)、および Windows Server 2008 R2 SP1 1.1 でのトランスポート層セキュリティ (TLS) のサポートを提供します。 TLS 1.2 のサポートについては、公式ドキュメントを参照してください。https://support.microsoft.com/en-us/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
アップデートパッチ
デフォルト値を設定する
- Windows 7 で TLS 1.1 および 1.2 を SChannel コンポーネント レベルで有効にします (以下の 2.1 または 2.2 更新プログラムのいずれかを採用します)。
2.1. Microsoft がレジストリをインストールおよび更新します。http://download.microsoft.com/download/0/6/5/0658B1A7-6D2E-474F-BC2C-D69E5B9E9A68/MicrosoftEasyFix51044.msi
2.2. レジストリを手動で更新し、次のレジストリ コードをコピーしてレジストリにインポートします。新しいテキストを作成し、サフィックス txt を reg (レジストリ キー) に変更してインポートします (インポートする前にバックアップを作成します)。
1 | [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp] |
検証システム
- システムがTLS1.2、TLS1.3をサポートしているかどうかを確認します。
PowerShell が開きます。
Net.ServicePointManager::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12
解決策 3
- 前の 2 つの方法はいずれも機能しません。システムを Windows 10 にアップグレードするには、究極の方法しか使用できません。
その他の参考コンテンツ
https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/
解決策は存在しますが、フレームワークのバージョンに依存します。
.NET 4.6以降。 TLS 1.2 をサポートするために追加の作業を行う必要はありません。デフォルトでサポートされています。
.NET 4.5。 TLS 1.2 はサポートされていますが、デフォルトのプロトコルではありません。それを使用するかどうかを選択する必要があります。次のコードは TLS 1.2 をデフォルトとして設定します。安全なリソースに接続する前に必ず実行してください。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
.NET 4.0。 TLS 1.2 はサポートされていませんが、システムに .NET 4.5 (以降) がインストールされている場合は、アプリケーション フレームワークが TLS 1.2 をサポートしていない場合でも、TLS 1.2 を使用するオプションがあります。唯一の問題は、.NET 4.0 の SecurityProtocolType に TLS1.2 のエントリがないため、この列挙値の数値表現を使用する必要があることです。
ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072;
.NET 3.5 以下。 TLS 1.2(*) はサポートされていないため、回避策はありません。アプリケーションを最新バージョンのフレームワークにアップグレードします。
PS シナリオ 3 の場合、プログラムで強制することなく、デフォルトで 4.5 に TLS 1.2 の使用を強制するレジストリ ハックもあります。
PPS Microsoft の Christian Pop が以下で述べているように、TLS1.2 サポートを有効にする .NET 3.5 用の最新パッチが利用可能です。
見る:
KB3154518 – 信頼性ロールアップ HR-1605 – NDP 2.0 SP2 – Win7 SP1/Win 2008 R2 SP1
KB3154519 – 信頼性ロールアップ HR-1605 – NDP 2.0 SP2 – Win8 RTM/Win 2012 RTM
KB3154520 – 信頼性ロールアップ HR-1605 – NDP 2.0 SP2 – Win8.1RTM/Win 2012 R2 RTM
KB3156421 -1605 HotFix Rollup through Windows Update for Windows 10.