最近のブラウザではSSLでないサイトは問答無用で悪という風潮なので、Webサイトを公開する時は必ずSSL化する必要が有ります。
Certbotの動かし方は諸説ありますが、今回はDockerでCertbotを動かしたいので、まずはそもそもAlpine LinuxでCertbotを使えるのかを確認しました。
また、サブドメインでWebサイトを開設する事があるので、ついでにワイルドカード認証も行います。
DockerでAlpine Linuxを実行する
以下のコマンドでイメージのダウンロードからコンテナの起動まで自動でやってくれます。
$ docker run -it --rm alpine
以降はコンテナ内のシェルで操作を行います。
環境
イメージのタグ指定は行わなかったのでlatest
が起動します。この時のバージョンは以下の通りでした。
$ cat /etc/alpine-release
3.11.5
Certbotのインストール
Alpine Linuxではapk
というパッケージマネージャが標準でインストールされていますので、これを使ってCertbotをインストールします。
$ apk update && apk add certbot
Certbot
以下のコマンドを実行すると対話的に認証が進みます。今回はApacheやnginx等のWebサーバーを用意していないので、DNS設定のみで認証が行えるDNS認証を行います。
コマンドを実行したらいくつかの質問に答えます。
$ certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --manual --preferred-challenges dns -d "*.kthksgy.com,kthksgy.com"
今回はWebサイトを開設するサーバー上で実行しているので、Y
と入力してEnterします。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for kthksgy.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
次に、DNS認証を行っているので、ドメインのDNSレコードにTXT
レコードとして以下の文字列J6coMQx4a5mFwt2JFN7UUKiEAd8POcs3yuv9sKSRiqE
を追加します。
追加したら、DNSレコードが反映されるまでEnterキーを押さないでください。押した場合は認証用文字列が変更されて、再度DNSレコードの設定が必要となります。
nslookup
で反映されたか一応確認出来ますが、一応5分くらい時間を置くと良いです。
# 反映されていない場合の表示
$ nslookup -q=txt _acme-challenge.kthksgy.com
Server: 127.0.0.53
Address: 127.0.0.53#53
** server can't find _acme-challenge.kthksgy.com: NXDOMAIN
# 反映された場合の表示
$ nslookup -q=txt _acme-challenge.kthksgy.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
_acme-challenge.kthksgy.com text = "J6coMQx4a5mFwt2JFN7UUKiEAd8POcs3yuv9sKSRiqE"
Authoritative answers can be found from:
5分程待ったら、Enterキーを押してみます。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.kthksgy.com with the following value:
J6coMQx4a5mFwt2JFN7UUKiEAd8POcs3yuv9sKSRiqE
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
認証が完了すると、以下のような表示になります。
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/kthksgy.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/kthksgy.com/privkey.pem
Your cert will expire on 2020-07-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
/etc/letsencrypt/
以下に証明書関連のファイルが作成されます。ファイルの実体は/etc/letsencrypt/archive/
にありますが、利用する際はそこへのシンボリックリンクが/etc/letsencrypt/live/
にあるので、それを参照してください。
$ pwd
/etc/letsencrypt/live/kthksgy.com
$ ls -la
total 12
drwxr-xr-x 2 root root 4096 Apr 19 14:09 .
drwx------ 3 root root 4096 Apr 19 14:09 ..
-rw-r--r-- 1 root root 692 Apr 19 14:09 README
lrwxrwxrwx 1 root root 35 Apr 19 14:09 cert.pem -> ../../archive/kthksgy.com/cert1.pem
lrwxrwxrwx 1 root root 36 Apr 19 14:09 chain.pem -> ../../archive/kthksgy.com/chain1.pem
lrwxrwxrwx 1 root root 40 Apr 19 14:09 fullchain.pem -> ../../archive/kthksgy.com/fullchain1.pem
lrwxrwxrwx 1 root root 38 Apr 19 14:09 privkey.pem -> ../../archive/kthksgy.com/privkey1.pem