Webアプリケーションの開発では自己署名証明書が使いたくなることがあります。サーバーがWindows + Internet Information Service(IIS)であれば作成は次の方法で行えます。
- IISマネージャーで作成
- PowerShellのコマンドレットで作成
手軽なのはIISマネージャーでの作成ですが小回りが利きません。一方PowerShellコマンドレットでの作成はこまかい指定が可能ですがIIS向けの証明書ストア登録が十分ではありません。Webを検索するとMicrosoft管理コンソール(MMC)のスナップインで証明書ストアにアクセスして手動でルート証明書にコピーするやりかたが散見されます。
手動でのルート証明書コピーを紹介されているエントリは、その当時はPowerShellでは自動化できなかったために手動の操作を紹介しているのかもしれません。本エントリ記述時点の最新のPowerShellであれば証明書プロバイダーが提供されているので、次のスクリプトで自己署名証明書の作成からルート証明書へのコピーまで一括で行えます。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$HostName = hostname | |
$Cert = New-SelfSignedCertificate -DnsName $HostName, "localhost" -CertStoreLocation "Cert:\LocalMachine\My" | |
$CertPath = Join-Path -Path "Cert:\LocalMachine\My" -ChildPath $Cert.Thumbprint | |
$TempPassword = ConvertTo-SecureString -String $([System.Security.Membership]::GeneratePassword(16, 3)) -AsPlainText -Force | |
$ExportFilePath = Join-Path -Path $([System.IO.Path]::GetTempPath()) -ChildPath "SelfSignedCertificate.pfx" | |
Export-PfxCertificate -Cert $CertPath -FilePath $ExportFilePath -Password $($TempPassword) | |
Import-PfxCertificate -FilePath $ExportFilePath -CertStoreLocation "Cert:\LocalMachine\Root" -Password $($TempPassword) | |
Remove-Item -Path $ExportFilePath |
ポイントは次。
- Microsoft管理コンソールの証明書スナップインは信頼されたルート証明書へのコピーをサポートしますが、PowerShellの証明書プロバイダーはコピーをサポートしません。ですが一度ファイルにエクスポートしてからインポートすれば同等の処理が実現できます
- エクスポートには Export-PfxCertificate 、インポートには Import-PfxCertificate を用います
- PFX形式(.pfx)でエクスポートする際はパスワードの指定が必要です。パスワードは .NET FrameworkクラスライブラリのSystem.Security.Membership.GeneratePasswordを使うと自動生成できます
- ConvertTo-SecureString の
Force
パラメータはPowerShell 7以降は不要とのことです
すこし手間が減りますので、よろしければお使いください。