常時SSLが一般的になってきています。
レンタルサーバのWordPressでは、簡単にLet’s Encryptを利用して独自ドメインのURLをSSL化する事ができます。
問題は業務利用しているIIS利用中のaspです。
こいつもSSL化しなければ。
環境は、WindowsServer2019の上で動いているIIS10です。
Let’s Encrypt は、与えられたドメインを制御する権限があなたにあることを検証し、証明書を発行するために、ACME プロトコルを使用しています。Let’s Encrypt の証明書を取得するためには、使用する ACME クライアントを1つ選ぶ必要があります。
ACME クライアント実装
Let’s Encryptの運営管理団体は、ISRGであり、公共の利益をもたらすデジタルインフラストラクチャプロジェクトの拠点として機能するために2013年5月に設立されています。
おすすめのACMEクライアントは「Certbot」と表記されているのですが、WindowsServerで導入事例を調べると、win-acmeの記述が多いです。というか、Certbotは、Apache,Nginxは対応しているようですが、IISは対応していないみたい。
だから、win-acmeなんですね、
公式サイトにある、Windows/IISを見ると
これだけ対応しているようですが、記事が圧倒的に多いwin-acmeを利用します。
win-acme (.NET)
ダウンロードします。
Gitではこんな感じで掲載されています。
展開した中身はこんな感じです。
IISサーバのバインドを開きます
あらかじめホスト名を追加しておきます。
以下の手順を実行する前にダウンロードした、win-acme フォルダを、C:\Program Files\win-acmeに移動します。
移動後、win-acmeを管理者として実行します。
実行するとコマンドプロンプトのような画面が表示されます。
N:Create certificate を選択します。
サイト名が表示されます。
すべてのサイトを選択したかったので <Enter>を入力しました。
mainホストを選びなさいという事なので、上に表示された1を選択
利用規約をデフォルトのアプリで読むか?との表示で、yes
承認するかで yes
e-mailは入力しませんでした。
最初にダウンロードしたwin-acme の場所を移動しておかないと、タスクスケジューラに実行ファイルの位置を登録されてしまうため、ファイルが見つからなくなり、実行できなくなります。
そんな時のタスクスケジューラの修正は下記の手順で行なえます。
A simple Windows ACMEv2 client (WACS)
Software version 2.2.9.1701 (release, trimmed, standalone, 64-bit)
Connecting to https://acme-v02.api.letsencrypt.org/...
Connection OK!
Scheduled task looks healthy
Please report issues at https://github.com/win-acme/win-acme
N: Create certificate (default settings)
M: Create certificate (full options)
R: Run renewals (0 currently due)
A: Manage renewals (1 total)
O: More options...
Q: Quit
Please choose from the menu: O
S: Manage secrets
V: Manage global validation options
T: (Re)create scheduled task
E: Test notification
A: ACME account details
I: Import scheduled renewals from WACS/LEWS 1.9.x
M: Encrypt/decrypt configuration
U: Check for updates
Q: Back
Please choose from the menu: T
Deleting existing task win-acme renew (acme-v02.api.letsencrypt.org) from Windows Task Scheduler.
Adding Task Scheduler entry with the following settings
- Name win-acme renew (acme-v02.api.letsencrypt.org)
- Path C:\Program Files\win-acme
- Command wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"
- Start at 09:00:00
- Random delay 04:00:00
- Time limit 02:00:00
Do you want to specify the user the task will run as? (y/n*)
サーバ証明書を開いてみます。
サーバ証明書が登録されています。
証明書の更新用にタスクも登録されてます。
SSLのポートである、443もバインドされています。すごい、win-acmeはよくできてる。至れり尽くせりです。
今までhttpでアクセスするとこんな感じで表示されてました。
しかーし、Google Chromeは、自動的にhttpsに補完されます。
しっかりと保護されており、証明書も「発行者R3」で登録されています。
今回取得したLet’s Encryptの証明書は、Windowsのタスクスケジューラに組み込まれ、更新切れを起こさないように自動的に更新してくれます。
しかし、それを証明する認証局の証明書は時々変更される事があるようで、その時に問題が起きないかは少し注意していた方が良さそうです。
古いルート証明書から新しいルート証明書への移行は完全に透過的だが、実際には過去に問題が発生している。特に古いソフトウェアを使っている場合は注意が必要だ。
Helme氏は特に、今回の期限切れで次のソフトウェアやプラットフォームが影響を受ける可能性が高いとして注意を呼びかけている。
9月末でLet’s Encryptルート証明書が期限切れ、古い製品は要注意
基本的には、透過的に移行されるという表現なのですが、古いAndroid端末は対応できなかったりするそうで。
R3への証明書の有効期限は 2025/9/16 だそうで、この近辺には少し情報をあさっておいた方が良さそう。
Windowsサーバー(IISなど)で win-acme を使ってLet’s Encryptの無料SSL証明書を運用していると、「ある日突然、証明書の期限が切れて更新されなくなった」 というトラブルに遭遇することがあります。
今回は、自動更新タスクが消失してしまった場合の確認箇所と、正しい復旧手順(特にタスク作成時の罠)について解説します。
まず、wacs.exe を立ち上げて現状を確認します。 更新が止まっている場合、メインメニューに以下のような不穏なメッセージが表示されているはずです。
Plaintext
Scheduled task not configured yet
(訳:スケジュールタスクがまだ設定されていません)
さらに、更新メニューを見ると:
Plaintext
R: Run renewals (1 currently due)
(訳:更新実行:1つが期限切れ、または期限間近です)
原因は明白です。 Windowsの「タスクスケジューラ」に登録されていたはずの自動更新タスクが、何らかの原因(サーバー移行、アップデート、手動削除など)で消えてしまっています。このままでは手動でコマンドを叩かない限り、永遠に証明書が更新されません。
復旧は以下の2ステップで行います。
まずは期限切れ(または寸前)の証明書を新しくします。 win-acmeのメニュー画面で R キーを押してください。
エラーが出ずに Success となれば、証明書の実体は更新されます。Webサイトにアクセスして、鍵マークが正常に戻ったか確認しましょう。
次に、消えてしまったタスクスケジューラを再登録します。 ここが一番のハマりポイントです。
O (More options…) を選択します。T などが割り当てられていることが多いです)。すると、以下のような質問が表示されます。
Plaintext
Do you want to specify the user the task will run as? (y/n*)
(訳:タスクを実行するユーザーを指定しますか?)
ここで y (Yes) を選んでしまいがちですが、基本的には n (No) を選ぶことを強く推奨します。
ここで特定のユーザー(例:Administrator)とパスワードを入力して設定すると、将来そのユーザーのログインパスワードを変更した瞬間に、タスクが認証エラーで動かなくなります。 これが「いつの間にか更新が止まっていた」原因のNo.1です。
n (No) を選ぶと、win-acmeは「SYSTEMアカウント(ローカルシステム権限)」でタスクを作成します。これならユーザーのパスワード変更の影響を受けず、安定して自動更新が稼働し続けます。
win-acmeの更新が止まっていたら、以下の手順で復旧させましょう。
wacs.exe を起動し、R で手動更新して急場をしのぐ。No を選び、システム権限で動かす。これで、次回からは忘れた頃に勝手に更新してくれるはずです。
最後にちゃんとタスクスケジューラに登録されているか確認しようね。