現役プログラマのプログラミング教室@岡崎市康生, Android/iOS(Swift/Kotlin)のアプリ開発、デジタル漫画制作を主軸事業としています。

AWSのLightsailのwordpress+Let’s EncryptのワイルドカードSSL証明書は結局どう作ってどう自動更新するのかメモ

何回もやってるのに忘れる&情報が錯綜してるのでメモとして残します。

システムを特別組まずデフォルトでwordpress利用しています。

結論自動更新のためにレゴツール(Lego)を使いました。

$sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly

最初これを使っていたのですが、調べてみると自動更新するのが手間のようでしたので、サクっとできそうなレゴツールでつくり直しました。(2023.05.20現在)

証明書の作り方

基本は公式と同じです。

順番にやればできるかと思います。

IAMユーザーの作成

AWSのIAMにて、ポリシーを作成し、そのポリシーを付与したユーザーを作成します。

以下のJSONで作成

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "route53:GetChange",
                "route53:ListHostedZonesByName",
                "route53:ListResourceRecordSets"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "route53:ChangeResourceRecordSets"
            ],
            "Resource": [
                "arn:aws:route53:::hostedzone/Z09751792HSJDVTY6GJTD"
            ]
        }
    ]
}

このポリシーをアタッチしたIAMユーザーを作成

作成したユーザーのアクセスキーも作成します。

作成したaws_access_key_idaws_secret_access_keyは次に使うのでメモしておきます。

接続設定

.awsフォルダを作成し、そこにcredentialsファイルを作成します。

sudo mkdir /root/.aws
sudo nano /root/.aws/credentials

エディタが開くので、作成したawsのアクセスキーを記載して保存&終了します。

[default]
aws_access_key_id = AKIA************
aws_secret_access_key = 3dfef**************************

LEGOクライアントインストール

ツールをダウンロードして解凍&展開します。

・ダウンロード

cd /tmp
curl -Ls https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i - -O lego.tar.gz

・解凍&展開

tar xf lego.tar.gz

Let’s Encrypt 証明書を作成

・証明書を作成するディレクトリを作成します。

sudo mkdir -p /opt/bitnami/letsencrypt
sudo mv lego /opt/bitnami/letsencrypt/lego

Route53をDNSとして証明書を作成します。

DOMAINとEMAIL-ADDRESSを置き換えてください。

sudo /opt/bitnami/letsencrypt/lego --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="*.DOMAIN" --dns route53 --path="/opt/bitnami/letsencrypt" run

応答には時間がかかるので少し放置します。

証明書が生成されると/opt/bitnami/letsencrypt/certificates/に作成されます。

証明書をリンクする

作成した証明書を使えるよにリンクをはり、再起動します。

sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key.old
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/apache2/conf/bitnami/certs/server.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt
sudo /opt/bitnami/ctlscript.sh restart apache

自動更新の設定

crontabにて更新設定します。

編集画面を起動します。

sudo crontab -e -u bitnami

以下を記載します。

日時の設定部分0 0 * * *は

分 時 日 月 曜日

の並びになっています。

0 0 1 * * sudo /opt/bitnami/letsencrypt/lego --path /opt/bitnami/letsencrypt --email="EMAIL-ADDRESS" --domains="DOMAIN"  --domains="*.DOMAIN" --dns route53 renew >> sudo /var/log/letsencrypt.log 2>&1 && sudo /opt/bitnami/apache/bin/httpd -f /opt/bitnami/apache/conf/httpd.conf -k graceful

実はまだ設定後更新されていないので、また来月確認して追記します。(時間に余裕があるので確認してません)

追記:2023/06/01

こちら失敗しておりました。

あ、すいません。30日以内での更新は駄目みたいでした。30日すぎたところで再度確認してみます