[PowerShell] PowerShell GalleryがTLS 1.2を強制する様になりました

2020.04.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

今月からPowerShell GalleryへのTLS 1.0およびTLS 1.1でのアクセスが廃止されTLS 1.2でのアクセスが必須となりました。
PowerShell Teamからの公式アナウンスは以下となります。

誰が影響を受けるのか

PowerShellとその内部で使用されるTLSのバージョンについては以前に個人ブログで書いた通りOSのバージョンおよびPowerShellの基盤となる.NET Frameworkの設定により微妙に異なります。

OSおよび.NET Frameworkの設定についてはJapan IE Support Team Blogのアーカイブ記事が参考になるでしょう。

PowerShell Core 6以降のバージョン

先述のブログ記事の通りPowerShell Core 6以降では既定でTLS 1.2がサポートされてますので今回の変更でも特に影響は受けません。
できる限り最新バージョンのPowerShellを使う様にしておけば良いでしょう。

Windows PowerShell 5.0 - 5.1

Windows PowerShell環境において、以前はPowerShell 3.0~4.0向けのPackage Managementモジュール(PowerShellGet含む)がPreviewリリースされていましたが、今はPowerShellGetはPowerShell 5.0~5.1のみのサポートとなります。
PoweShell 5.0~5.1は.NET Framework 4.5以降を基盤としており、この場合の既定のTLSバージョンについてはOSの設定依存となります。

基本的に最新のWindows 10やWindows Server 2019を使っている場合は問題ないはずですが、古いOSを使っている場合はこの変更の影響を受けPowerShell Galleryへのアクセス時にエラーになる可能性があります。

TLS 1.2を強制するPowerShellGetのバージョン

PowerShell Galleryへのアクセス時にエラーになる場合で.NET FrameworkやOSの設定を見直せない場合は、PowerShellGetモジュールのバージョンを最新すると良いでしょう。

本日時点の最新バージョンであるVer.2.2.4から内部でTLS 1.2の使用を強制する改修が加えられていますので、モジュールを最新にすることで問題を解消することが出来ます。

以下のコードでPowerShellGetを更新できますのでお試しください。

# システムレベルでのPowerShellGetの更新 : 要管理者権限
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
Install-Module PowerShellGet -RequiredVersion 2.2.4 -SkipPublisherCheck

ちなみに、ユーザーレベル(-Scope CurrentUser)でPowerShellGetを更新したい場合はこちらの記事を参考にしてください。

最後に

ざっとこんな感じです。
基本的に今回の変更を受けるのは古いOSを使っているユーザーとなり対象となる方もそう多くないとは思いますが、もしPowerShell Galleryへのアクセスに問題が起きる様であれば本記事の内容を参考にしてみてください。