AmazonLinux2でLetsEncryptを使ってサブドメインをワイルドカードSSL化


ドキュメントルートに.well-knownディレクトリを作成する

mkdir .well-known 
chmod 775 .well-known 

certbot-auto を持ってくる

mkdir -p ~/bin
curl -L https://dl.eff.org/certbot-auto \
       -o ~/bin/certbot-auto
chmod a+x ~/bin/certbot-auto

Amazon Linux2でも動くように設定をイジる

cd ~/bin
vi certbot-auto
# elif [ -f /etc/issue ] && grep -iq "Amazon Linux" /etc/issue ; then
elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \
     grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then

ファイルを移動する

mv ./certbot-auto /usr/local/bin
#あとパスも通しておく
export PATH="$PATH:/usr/local/bin"

以下のコマンドを流す

certbot-auto certonly --manual -d *.taroimo.jp -m [email protected] --agree-tos --manual-public-ip-logging-ok --debug

--debugフラグを付けないとエラーが出るらしい。実際出る。

下のようなメッセージに加えてPlease Enter みたいなのが出たら
Route53にTXTレコードを追加
_acme-challenge.taroimo.jpに表示されたvalueを割り当てる

Please deploy a DNS TXT record under the name
_acme-challenge.taroimo.jp with the following value:

[TXTレコードの値がここに出る]

Before continuing, verify the record is deployed.

令和元年8月14日 追記
複数のインスタンスで同じドメインのサブドメインを使っている場合は
インスタンス毎に_acme-challengeを設定しておく必要がある。
上書き上書きでやってたら最初のインスタンスの証明書期限が切れたタイミングで
更新ができなかった(当たり前だが)
でもTXTレコードって1個しか設定出来ないし困ったなーとか思ってたけどそんなことなかった。
こんな感じで複数行にしておけばおkぽいです。
Valueはそれぞれダブルクォートで囲んで、Value毎に改行を入れましょう。

別ターミナルを立ち上げてnslookupでacme-challengeのTXTレコードが上記の値であることを確認する

nslookup -q=txt _acme-challenge.taroimo.jp
  _acme-challenge.taroimo.jp text = "TXTレコードの値"

virtualssl.confにSSL化するサイト設定を記述

<VirtualHost *:443>
    # もろもろ設定
</VirtualHost>

Apacheを再起動してhttpsでアクセスして証明書が適用されているか確認
適用されてたら.well-knownディレクトリを削除して完了

おわり。