自宅のWindows Server Essentialsは、独自ドメインのDDNSとLet’s Encryptの無料SSLを利用しています。
Lets’s EncryptのSSL証明書は、GUIツールである「Certify the web」を使って自動更新とバインドの更新を実現しており、スクリプトの書けない私でも更新を自動化できていますが、これまでLights-Outのクライアントから外部アクセスする際のSSL証明書バインドを都度やり直す必要があり、閉口していました。
Certify the Webを利用した話は、以前以下の記事で記載しました。
Lights-Outの外部アクセス
外部からサーバーを再起動したり、クライアントコンピューターにWoLパケットを送信して起動できる「Lights-Out」には、iOS/Android版のモバイルクライアントが用意されてます。
これらのクライアントアプリが外部からアクセスする際には、TCP 7784ポートを利用するため、ルーターからサーバーへ7784ポートをフォワードするようにしておく必要があります(詳細は、サポートページを参照)。
また、Lights-Outで利用するポートに適切なSSL証明書を紐づけておく必要があります。
Certify the Webで取得した証明書を、Lights-Outにも紐づける
Certify the Webでは、Lets’s Encryptで証明した証明書を構成する際にスクリプトを利用することができます。Windows Server Essentialsでは、このスクリプトを使うことでIIS以外のサービスにもSSL証明書をバインドすることができます。
私は以前以下の記事で紹介したように、「RDPGatewayServices.ps1」のスクリプトに少し手を加えることで、RDゲートウェイだけでなく、リモートアクセスサービスへのSSL証明書設定も自動化しました。
今回は、このスクリプトに以下のように手を加えて、Lights-Outへの証明書バインドも自動化します。SSL証明書のバインドにはnetshコマンドを利用します。
#Lights-Out Delete
netsh http delete sslcert ipport=0.0.0.0:7784
#Lights-Out add
netsh http add sslcert ipport=0.0.0.0:7784 certhash= $result.ManagedItem.CertificateThumbprintHash appid="{12345678-db90-4b66-8b01-88f7af2e36bf}"
最初に、7784ポートへの古いSSL証明書のバインドをクリアし、その後に7784ポートとLights-OutのアプリケーションIDを指定して新しい証明書の紐づけを行います。
削除と追加の間に時間が空くよう、私は以下のようにコードの配置をしました。
以前から不便に思っていたことが、無事解決できてすっきりしました。まだまだ、我が家のWindows Server Essntialsは活躍してくれそうです。