例
demo.teppi.netの証明書を、HTTP01チャレンジで更新する方法
LetsEncryptを使う場合のシミュレーションをしてみます。(※実は、demo.teppi.netの証明書は *.teppi.net のワイルドカード証明書ですが。Let's Encryptも試してみました)
必要なネットワーク・OS要件
WinACMEを動かすマシン(例ではdemo.teppi.net)から、 demo.teppi.netに関してDNS LookupとHTTPSアクセスができること。(LAN内DNSサーバがある場合、バイパスしてインターネットDNSにアクセスするようにします。方法については以前の記事に記しました)
WinACMEのインストール・使い方については、前の記事([FileBlogSSL6] WinACMEを呼び出すPowerShellスクリプト例)を先に読んでください。(下記の例では、初回登録方法についてのみ記し、二回目以降の更新、スケジュール作成については省略します)
Let's Encryptを使うためにDNS登録
DNSに Let's encryptを使うことを宣言させる必要がある
CAAレコードをDNSに登録すると、そこにあるホスト以外に証明書発行をさせないようにできる。
LetsEncryptはCAAレコードの存在を必須とするので、この行の登録が必要
demo.teppi.net. CAA 0 issue "letsencrypt.org"

WinACME設定スクリプト
WinACMEは、wacs.exeを起動すると対話的に設定画面が出てくるが、これは主にLet's Encrypt User向けで、自前のパラメータを設定するならCLIのほうが早い。
PowerShellスクリプトを作成
C:\WinACME\Scripts\install-demoteppinet.ps1 (初回登録用スクリプト)C:\WinACME\Scripts\post-demoteppinet.ps1 (新しい証明書更新後実行される)
初回登録用スクリプト install-demoteppinet.ps2 に、下記のように書いて実行する。
HTTP-01チャレンジを通すため
$WebRootPath = "D:\FileBlog5Data\Config\Htdocs\root",
は、FileBlog5のデータフォルダに応じて設定してください。
C:¥ProgramData¥FileBlog5¥Config¥Htdocs¥root など、FileBlog5のデータフォルダ以下の「/Config/Htdocs/root」を指定します。
install-demoteppinet.ps1
param(
[string]$WacsPath = "C:\Program Files\WinACME\wacs.exe",
# Lets Encrypt ACME
[string]$AcmeDirectoryUrl = "https://acme-v02.api.letsencrypt.org/",
[string]$Email = "okd@teppi.com",
# 証明書対象
[string]$Hosts = "demo.teppi.net",
[string]$CommonName = "demo.teppi.net",
[string]$FriendlyName = "demo-teppi-net",
#Validation
[string]$WebRootPath = "D:\FileBlog5Data\Config\Htdocs\root",
# 出力
[string]$PemFilesPath = "C:\WinACME\Certs",
[string]$PemFilesName = "activation-online",
[string]$PostInstallScript = "C:\WinACME\Scripts\post-install-demoteppinet.ps1"
)
$ErrorActionPreference = "Stop"
if (!(Test-Path $WacsPath)) {
throw "wacs.exe が見つかりません: $WacsPath"
}
if (!(Test-Path $PemFilesPath)) {
New-Item -ItemType Directory -Path $PemFilesPath -Force | Out-Null
}
$arguments = @(
"--baseuri", $AcmeDirectoryUrl,
"--source", "manual",
"--host", $Hosts,
"--commonname", $CommonName,
"--friendlyname", $FriendlyName,
"--id", $FriendlyName,
"--validation", "filesystem",
"--validationmode", "http-01",
"--webroot", $WebRootPath,
"--store", "pemfiles",
"--pemfilespath", $PemFilesPath,
"--pemfilesname", $PemFilesName,
"--installation", "script",
"--script",$PostInstallScript,
"--scriptparameters", " `"{CertCommonName}`"",
"--accepttos",
"--emailaddress", $Email,
"--verbose",
"--notaskscheduler"
)
Write-Host "Creating LetsEncrypt renewal with Http01 validation..."
& $WacsPath @arguments
if ($LASTEXITCODE -ne 0) {
throw "wacs 実行失敗。ExitCode=$LASTEXITCODE"
}
Write-Host "完了:LetsEncrypt用 renewal を作成しました。"
初回実行をしてみる。
PS C:\winACME> .\install-demoteppinet.ps1
アウトプットはC:\WinACME\Certsにできる

