【2016.7.19時点の話】
今のところ, letsencrypt-win-simple は Windows 版の Apache 上での証明書更新作業に対応していないし,公式のクライアントである certbot も,同様の状態みたいなので, letsencrypt.sh というスクリプトを使う方法を考えてみた。☞「Windows で Letsencrypt.sh を使う-#1」
=================================================================
一昨日,これを書いた。あの時点での Let’s Encrypt 製証明書は o6asan.com に対してだけだった。
自鯖の環境の中で今回の件に関係があるのは,以下の通り。
3/9 に ‘New Name, New Home for the Let’s Encrypt Client‘ という記事が出てたけども, 公式クライアントソフトは今も Windows をサポートしていない。 List of Client Implementations に Win 用クライアントが 2つあったが, SAN 対応ということを視野に入れて, letsencrypt-win-simple を使うことにした。 Oocx.ACME については, SAN についてのページを見つけられなかったからだが,見つけられなかっただけで,もしかしたら対応しているのかもしれない。
letsencrypt-win-simple を使うことにしたので,それについて書いていこう。
ここ 2 ・ 3 日で, o6asan.com 用の証明書を 3 回作った。参考 URL。
1 度目は, o6asan.com にだけ対応したもの。 letsencrypt.exe
を使った。
2 度目は, letsencrypt.exe --san
を使ったんだが, 100 個までに使える SAN 対応証明書を作れるとウキウキしていて,ドジった。 ‘o6asan.com’ を Alternate server names に入れ落としたのだ。結果として,こんなのが表示されることとなった。これは, juneさんからいただいた。 Grrr。
当然,作り直したよ。ようやく SAN 対応証明書が手に入った。 letsencrypt.exe --san
でやった。自分をほめてやりたいわぁ \(^O^)/。
>letsencrypt.exe --san
(省略) Config Folder: C:\Users\UserID\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org Certificate Folder: C:\Users\UserID\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org (省略) Enter an email address (not public, used for renewal fail notices):
使用可能な email address を入力。
(省略) Do you agree to https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf? (Y/N)
‘Y’ を入力。
(省略) W: Generate a certificate via WebDav and install it manually. S: Generate a single San certificate for multiple sites. F: Generate a certificate via FTP/ FTPS and install it manually. M: Generate a certificate manually. A: Get certificates for all hosts Q: Quit Which host do you want to get a certificate for:
このクライアントソフトの自動生成は,今のところ Apache に対応していないので, ‘M’ を入力。
Enter a host name:
‘example.com’ を入力。 ☜ 勿論,実際はあなた自身が使っているホスト名を入れる。
Enter all Alternative Names separated by a comma
‘example.com,www.example.com’ という感じで入力。
Enter a site path (the web root of the host for http authentication):
DocumentRoot のパスを入力。
オプションなしで, letsencrypt.exe を走らせると,ここでエラーが出るようだ。その場合は, webroot オプションを使うとうまくいく。
letsencrypt.exe –manualhost example.com –webroot サイトのDocumentRoot
という感じで走らせる。
クライアントが証明書や他の準備をする間ちょっと間があって,その後,以下のメッセージが表示される:
Do you want to specify the user the task will run as? (Y/N)
私は ‘Y’ を入力し, UserID とパスワードを入れたが,この情報は,図 1 のタスクで使われるので,どちらを選ぶかは各人の環境によると思う。これで,新しい証明書作成が完了した。
クライアントは, sever-crt.pem と ca-xxxx-crt.pem を作ってくれるが, OpenSSL1.0.2 と 2.4.8 より新しい Apache を使っているので,両方を結合した証明書が望ましい。
というわけで, cmd.exe で以下の操作をやった:
> copy sever-crt.pem + ca-xxxx-crt.pem server.crt
ここは,今のところ手作業だが,証明書の次の書き換えの 5 月までには自動化する必要がある。でないと,サイトで期限切れが表示される可能性がある。
毎度ながら SSLLabs でテストしてみた。 ☞ SSL_Server_Test_o6asan_com4.html
えーっと,上のファイルの URL に気づいてもらえたかな? test.o6asan.com になってるのだ。加えて,ブラウザのアイコンは test.o6asan.com に対して何も警告を表示していないと思う。新証明書の威力だよ。最高!
そういえば, fullchain.pem( つまり server.crt) をどうやって自動更新するかという問題について,追記を忘れていたんだけども,多分,以下の bat で解決できると思う。多分というのは,まだ 1 回も実際の更新があってないからネ。:
@echo off
pushd C:\Users\UserID\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org
copy /Y C:\letsencrypt-win\list.txt C:\letsencrypt-win\list-old.txt
C:\letsencrypt-win\letsencrypt.exe --renew --baseuri "https://acme-v01.api.letsencrypt.org/"
forfiles /m *.pem /C "cmd /c echo @file @fsize @fdate @ftime" >C:\letsencrypt-win\list.txt
fc /L C:\letsencrypt-win\list.txt C:\letsencrypt-win\list-old.txt
if %errorlevel%==0 goto not_do_anything
if %errorlevel%==1 goto cpy
popd
exit
:not_do_anything
popd
exit
:cpy
copy /Y sever-crt.pem + ca-xxxx-crt.pem \pathto\server.crt
copy /Y server-key.pem \pathto\server.key
popd
exit
bat の名前は “letsencrypt.bat” にした。これ用の新タスクをこさえてやり,デフォルトのデイリータスクと置き換える。新旧のタスクの属性は同じである。
もし使ってみようという方がいたら, 2 ・ 3 準備がいる。
pushd C:\Users\UserID\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org
forfiles /m *.pem /C "cmd /c echo @file @fsize @fdate @ftime" >C:\letsencrypt-win\list.txt
以上!
上記の bat を作ったんだけども,どうやら, letsencrypt-win-simple の更新能力について,勘違いしていたようだ。 letsencrypt-win-simple は今のところ,Windows 上の Apache での証明書更新をサポートしていないようだ。 5/12 から更新作業ができるはずで,スクリプトは下記のメッセージを吐き出していたが,実際には更新が行われていなかった。
Checking Renewals Checking Manual MyDomain.com (My DocumentRoot) Renew After 2016/07/12
そのせいで, 6/1 と 6/10 の 2 回 “Let’s Encrypt certificate expiration notice” をメールで受け取った。 “Unable to force renewal” ということらしいので,今回は,更新をあきらめて,新しい証明書を取った。 GitHub の issues に Thumbs up を付け加えたほか,今もほかにいい方法がないか探している。
更新時のバクが直っているという情報を Steffen からもらった。今のところ,コンパイル済みのファイルは gdau のコメント上にある。自分ではテストしていないが,次のバージョンではマージされる機能ではないかと思う。
This website uses cookies.
View Comments
おはようございます。
会社のドメイン数が多いのでlet`s encryptと有料の証明書の両方併用をかんがえていました。
しかし、let`s encryptはドメイン数の制限が100だからサブドメインも含めてと思っていましたが、コモンネームでsan`sにいれられるのら費用を抑えることができそうです。
くりくりさん,こんにちは。
私が読んだのは, Rate Limits for Let’s Encrypt と FAQ 程度なんですが,証明書の制限で気が付いたのは,
1 期間が 90 日間であること。更新失敗も考慮に入れて, 60 日を過ぎたら,更新するように書かれていました。
2 今のところ,ワイルドカード証明書に対応していないこと。
3 SAN に対応はしているが,内包できるサーバネーム数が 1 枚につき 100 までであること。
4 レジスタドメイン 1 つにつき,週あたりの証明書再発行は, 5 回までであること。
5 この 5 は ACME クライアントの開発環境に関係すると思われますが,保留中の Authorizations/Account に制限を設けているようです。今のところ,週当たり 300 アカウントにセットされています。
6 異なるドメインについての証明書発行数には制限はない
ということくらいです。サブドメインがちょくちょく増えたり減ったりするホストでは,ワイルドカードが使えないのは,不便ですよね。
まだまだ,学習中です。