[2017/10/20 時点の話] ApacheLounge 2.4.x 版でも mod_md が使えるようになったので、 dehydrated ( 旧 Letsencrypt.sh) の代わりに、今はこれを使っている。この件に関する記事→「Let’s Encrypt 証明書の更新方法を dehydrate から mod_md に」。
========================================================
[10/26 時点の話] 鍵交換に Elliptic curve Diffie–Hellman を使うようにしたので,その件についての記事を書いた。「Windows で Letsencrypt.sh を使う-#4」
========================================================
[9/19 時点の話] 無事,証明書の自動更新が成功したので,その件についての記事を書いた。☞「Windows で Letsencrypt.sh を使う-#3」
また,当該スクリプトのプロジェクト名が letsencrypt.sh から dehydrated に変わり,リポジトリも https://github.com/lukas2511/dehydrated/releases になったので,記事内の letsencrypt.sh は dehydrated に読み替えてほしい。
========================================================
この間書いたように, letsencrypt-win-simple が Windows 版の Apache 上での証明書更新作業に対応していないし,公式のクライアントである certbot も,同様の状態みたいなので, letsencrypt.sh というスクリプトを使う方法を考えてみた。
‘Run native Bash on Ubuntu on Windows’ という話が完全になれば, Windows10 上で sh ファイルを動かすのも楽になるかもしれないが,まだ, Insider Preview での話にとどまってるみたいだし,もともと自鯖は Windows7 で動いているわけだから, sh は Cygwin で動かすことにした。準備としては, setup-x86.exe を走らせ, wget と apt-cyg を追加インストールした。
この辺のインストールのやり方については,「Cygwin 上で h2load をビルドする」をご覧ください。
$ apt-cyg install git
$ cd /usr/local
$ git clone https://github.com/lukas2511/letsencrypt.sh
$ cd letsencrypt.sh
$ git pull https://github.com/lukas2511/letsencrypt.sh
$ apt-cyg install curl
letsencrypt.sh のテストを行う。
$ cd /usr/local/letsencrypt.sh
$ vi domain.txt
我が家の domain.txt はこんな感じである。
$ cd /usr/local/letsencrypt.sh
$ cp docs/examples/config .
$ vi config
#CA="https://acme-v01.api.letsencrypt.org/directory" ↓ CA="https://acme-staging.api.letsencrypt.org/directory" * テスト中のみ。 #BASEDIR=$SCRIPTDIR ↓ BASEDIR="/cygdrive/c/Users/UserID/AppData/Roaming" * どこにおいても構わないが,セキュリティを考慮のこと。 #DOMAINS_TXT="${BASEDIR}/domains.txt" ↓ DOMAINS_TXT="${SCRIPTDIR}/domains.txt" #WELLKNOWN="${BASEDIR}/.acme-challenges" ↓ WELLKNOWN="/cygdrive/x/Apache24/htdocs/.well-known/acme-challenge" * 実のところ, letsencrypt-win-simple によるデータがすでに '.well-known/acme-challenge' にあるので,これを letsencrypt.sh で使えるように前と同じ場所にした。
$ cd /usr/local/letsencrypt.sh
$ ./letsencrypt.sh -c
# INFO: Using main config file /usr/local/letsencrypt.sh/config + Generating account key... + Registering account key with letsencrypt... Processing o6asan.com with alternative names: www.o6asan.com test.o6asan.com + Signing domains... + Generating private key... + Generating signing request... + Requesting challenge for o6asan.com... + Requesting challenge for www.o6asan.com... + Requesting challenge for test.o6asan.com... + Responding to challenge for o6asan.com... + Challenge is valid! + Responding to challenge for www.o6asan.com... + Challenge is valid! + Responding to challenge for test.o6asan.com... + Challenge is valid! + Requesting certificate... + Checking certificate... + Done! + Creating fullchain.pem... + Done!
ちゃんと終わったら,証明書は ${BASEDIR}/certs/YourDomain にできている。
さて,本番。
CA="https://acme-staging.api.letsencrypt.org/directory" ↓ #CA="https://acme-v01.api.letsencrypt.org/directory"
$ ./letsencrypt.sh -c -x
cert.csr cert.pem cert-xxxxxxxxxx.csr cert-xxxxxxxxxx.pem chain.pem chain-xxxxxxxxxx.pem fullchain.pem fullchain-xxxxxxxxxx.pem privkey.pem privkey-xxxxxxxxxx.pem
$ ./letsencrypt.sh -gc
Apache2.4.8 以上を使っている場合, fullchain.pem と privkey.pem があればいいのだが,ここで問題にぶち当たった。 Letsencrypt.sh が作る fullchain.pem, privkey.pem は LINUX フォーマットのシムリンクファイルだった。当然, Windows OS では使えない。というわけで, fullchain-xxxxxxxxxx.pem と privkey-xxxxxxxxxx.pem を server.crt と server.key として,サーバの証明書ディレクトリにコピーしてやった。
cmd.exe を管理者として,起動。 >pushd ${BASEDIR}/certs/YourDomain >copy /Y fullchain-xxxxxxxxxx.pem pathtoserver.crt >copy /Y privkey-xxxxxxxxxx.pem pathtoserver.key >x:Apache24binhttpd -k stop >x:Apache24binhttpd -k start
以上。
あとはどうやって自動更新するかという問題だが,これは,次記事で書くつもりです。
1 週間くらい前に, Let’s Encrypt 製の証明書の更新がうまく行ってないのに気づいた。アレッとは思ったが手動ですればいいやと更新したら,これでもエラーが出た。エラーは 403 で, “.well-known/acme-challenge” にアクセスするときに出てるみたいだった。何で,突然出るようになったんだといろいろ調べて,結局, BPS のせいだということが分かった。自鯖の “.well-known/acme-challenge” は Document Root にあるのだが ― ここは WordPress の base ディレクトリでもある ― 新バージョンでさらにルールが強化された BPS が,ここへのアクセスを締め出してしまったようだ。
というわけで, “.well-known/acme-challenge” を別の場所に移動し, apache2.4 用に conf を 1 枚。中は, Alias の定義である。
Alias /.well-known/acme-challenge "/pathto/.well-known/acme-challenge/"
<Directory "/pathto/.well-known/acme-challenge/">
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
</Directory>
そういえば,前にくりくりさんのお話から,「CertbotWebサーバー証明書更新エラー とApache起動不能」に答えを書き込んだ際に,「Let’s encrypt のWeb認証に失敗する場合の許可の通し方」をリンクしたが,今回の件と似てるよなと,すべての対処が終わったあとで,思い出した(苦笑)。
This website uses cookies.