Invoke-WebRequestで接続が切断されましたの対処方法

toc目次

Invoke-WebRequestのエラー

Invoke-WebRequestを実行した際に一部のサーバーで下記エラーが発生しました。

 Invoke-WebRequest : 接続が切断されました: 送信時に、予期しないエラーが発生しました。

エラーの原因

対象サイトがTLS 1.2を要求していたが、該当のサーバーがTLS 1.2を使用する設定がされていなかったためでした。

SecurityProtocolの確認はPowerShellで[Net.ServicePointManager]::SecurityProtocolを実行することで確認できます。

🖥 実行できないサーバーのSecurityProtocol

PS > [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls

🖥 実行できるサーバーのSecurityProtocol

PS > [Net.ServicePointManager]::SecurityProtocol
Tls, Tls11, Tls12

対応方法

下記コマンドで利用可能なプロトコルバージョンのリストを表示できます。

[enum]::GetNames([Net.SecurityProtocolType])
PS > [enum]::GetNames([Net.SecurityProtocolType])
SystemDefault
Ssl3
Tls
Tls11
Tls12
Tls13

利用可能なプロトコルバージョンに「Tls12」が含まれている場合は、下記コマンドを実行することでTLS 1.2を使用するようになります。

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

また、下記コマンドを実行すると、TLS 1.0、TLS 1.1、TLS 1.2から最適なプロトコルを使用するようになります。

[Net.ServicePointManager]::SecurityProtocol = @([Net.SecurityProtocolType]::Tls,[NetSecurityProtocolType]::Tls11,[Net.SecurityProtocolType]::Tls12)