X

独自ドメインでDDNS運用するWindows Server 2016 EssentialsのSSL/TLS証明書をLet’s Encryptで無料取得/自動更新するように構成した

久しぶりの投稿です。

我が家のWindows Server 2016 Essentialsは、ある時期から無料の「xxx.remotewebaccess.com」から、勉強もかねて独自ドメインでの運用に切り替えています。

  • お名前.comで取得したドメイン(安い)
  • MyDns.jpのDDNSサービス(無料)
  • DigicertのSSL/TLS証明書(MVP向け特典で無料)

の組み合わせで運用していましたが、この中で少し面倒なのがSSL/TLS証明書。Digicertで取得しているSSL証明書の有効期間は1年なのですが、昨年の更新の際には免許証や住所を証明する公共料金等の請求書の提出が求められ、何度か手続きが往復しておっくうでした。

今回はこのSSL/TLS証明書を、無料で取得できるLet’s Encryptで取得するように構成します。

Let’s Encryptとは

Let’s Ecnrypt 総合ポータル https://free-ssl.jp/に詳しい説明は譲るとして、常時SSLが主流になろうとしている昨今、無料でSSL/TLS証明書を取得できる個人にうれしいサービスです。

通常個人がブログなどで利用する分には、無料のSSL/TLS証明書で十分ですね。

WindowsでLet’s Encryptの証明書取得と更新を自動化できる「win-acme」

Linuxでは、Let’s Encryptの証明書取得や更新を自動化するアプリケーションcertbotなどが提供されていますが、Windowsでも同様のことができるwin-acmeが提供されています。

使い方は、 win-acme を利用してIISでLet’s Encrypt を利用したSSLサイトを作成する (Windows Server Tips)を参照させていただきました。

Windows Server 2016 Essentialsでwin-acmeを使ってみる

上記のサイトで解説されている流れとは若干異なる流れですが、win-acmeでWindows Server 2016 EssentialsのIISにもLet’s EncryptのSSL/TLS証明書を自動発行ができました。

.net 4.7.2以上のインストールが必要です。win-acmeを実行した際に、インストールが求められ、自動でダウンロードしてくれます。

異なるポイントは、2016 Essentialsでは、2つ目のメニューで[4: Manualy input host name]を選択して、DDNSで利用しているドメイン名を入力した点です。

[N:Create new certificate]を選択
[4: Manualy input host names]を選択

そのほかは、ウィザードに従って選択していくだけなので、基本的に迷うことはないと思います。また、自動更新のタスクもスケジュール化して自動実行してくれます。

しかし、Windows Server Essentialsでは、RDゲートウェイやVPNでもSSL/TLS証明書が利用されていますが、残念ながらwin-acmeではそこまでは設定してくれず、リモートWebアクセスからのリモートデスクトップや、SSTP VPNが利用できなくなってしまいます。

RDゲートウェイ、VPNも利用している場合は「Certify the Web」がお勧め

RDゲートウェイの証明書の設定の自動化にも対応しているのが「Certify the Web」です。

この設定まで含めて自動化するには、「Certify the Web」がお勧めです。

画面は日本語化されています

具体的な設定方法は、Get a free Let’s Encrypt SSL certificate for Access Anywhere and automatically renew it.で紹介されています。

  1. 証明書を取得
  2. 証明書をエクスポート
  3. サーバーダッシュボードからAnywhere Access構成ウィザードを実行し、証明書をインポート
  4. 自動構成のスクリプトを構成

と、一度取得した証明書をWindows Server Essentialsエクスペリエンスの機能に取り込み、RDゲートウェイへの反映まで自動化してくれます。

ポイントはスクリプト

Certify the Webでは、証明書発行の事前または事後に実行するPowerShellスクリプトを設定することができます。あらかじめプリセットされている、[MS RDP Gateway: Enable Certificate] を実行することで、RDゲートウェイへの証明書反映も実行してくれます。

しかしこれだけだと、SSTP VPN用のサーバー証明書が反映されず、VPNが利用できなくなってしまいます。そのため、[MS RDG Gatewey: Enable Certificate]で選択した[RDPGatewayServices.ps1]を修正して下記に内容を追加し、SSTP VPN用の証明書も更新するようにします。

このコードは、Certity the webのGithubで挙げられていたイシューから拝借してきました。次のバージョンでは反映されるのではないかと思います。
Possible PowerShell Script for RRAS (SSTP VPN) #447

# Enable/redo certificate for SSTP VPN

param($result)

# Store certificate in variable
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Thumbprint -match $result.ManagedItem.CertificateThumbprintHash}

# Stop RRAS, set cert, start RRAS
Import-Module RemoteAccess
Stop-Service RemoteAccess
Set-RemoteAccess -SslCertificate $cert
Start-Service RemoteAccess

加えて私は、VPNクライアントに割り当てるDHCPアドレスがよくリセットされるので、それを設定するスクリプトも追加しました。通常はこのスクリプトは不要ですが、DCHPプールが何かしらの契機で削除されてしまった場合には有効です。

# Refresh DHCP Pool 
Set-VpnIPAddressAssignment -IPAssignmentMethod "StaticPool" -IPAddressRange "x.x.x.x", "x.x.x.x"

Windows Server Essentialsでは、この 「Certify the Web」 のほうが本命ですね。

最近はNASに移行される方も多いと思いますが、我が家はまだWindows Server Essentialsを運用していく予定でいます。

これで、SSL/TLS証明書も無料で更新して自動反映できるようになったので、Windows Server Essetntialsの運用コストがまた下がりました。
最近はNASに移行される方も多いと思いますが、我が家はまだWindows Server Essentialsを運用していく予定でいます。

ださっち: