環境
- Windows server 2016
- Host Application: C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe
- PSVersion: 5.1.14393.3471
- PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.14393.3471
- BuildVersion: 10.0.14393.3471
- CLRVersion: 4.0.30319.42000
- PSRemotingProtocolVersion: 2.3
事象
Invoke-WebRequest の実行に関して, Local 端末では問題無いが Windows Server 2016 上で実行すると次の error が発生した.
Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send. + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
PowerShell 利用時に default で TLS1.0 を利用しようとして error となっている.
error が曖昧過ぎる...
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) Exception calling "DownloadString" with "1" argument(s): "The request was aborted: Could not create SSL/TLS secure channel."
上記のように chocolatey を download しようとした際には若干分かりやすい exception が吐かれる.
対応
TLS 関連で問題が発生することは珍しく無く, 一先ず TLS1.2 を強制することで解決するかどうか見る.
上記は TLS1.2 を利用することで解決した.
# Default TLS 1.0 and will be caught security error so use 1.2 temporary. Set-ExecutionPolicy Bypass -Scope Process -Force [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 ### or # Default PowerShell TLS 1.0 and will be caught security error so make use 1.2 permanently. # https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/15150051-add-support-for-tls-1-2-invoke-webrequest-invoke New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\ -Name SchUseStrongCrypto -Value 1
一時的か永続的に (Server 側に) 設定するかは設計方針による.