サイトデザインを新しくしました!

AWS LightsailのWordPressでLet’s Encryptを使ってSSL化する方法

はじめに

巷には、LightsailのWordPressでLet’s Ecryptを使ってSSL化する方法が数多く紹介されてます。

https://debugging-code.com/wp-content/uploads/2019/02/アイコン.png
もびるど

その中でも、一番確実なのは、Bitnamiのドキュメンテーション通りに実装する方法だと考えています。なぜなら、LightsailでWordPressを使う場合、必ずBitnamiだからです。

しかし難点が一つあります。それはBitnamiのドキュメンテーションが英語だけなのです。

そこで今回、このBitnamiのドキュメンテーションをベースに、私なりの解説記事を書くことにしました。 この記事に従ってもらえれば、Bitnamiのドキュメンテーションに従って設定したことになります。

なるべく短時間に実現できるよう、余計な記述は省きました。 なおこの記事は、2019年2月9日現在のものがベースになっています。 要望があれば、定期的に更新するようにしたいと思います。

参考 Generate And Install A Let's Encrypt SSL Certificate For A Bitnami Applicationbitnami

Bitnami用にSSL証明書を作成する方法

前提条件

  • Lightsail上にBitnamiのWordPressを設定していること。
  • 静的IPアドレスを設定していること。
  • ドメイン名を所有していること。
  • DNS ゾーンを設定していること。

この自動設定スクリプトを使う場合は、以下を打つだけで設定できます。YOURMAILとYOURDOMAINを実際のメールアドレスとドメイン名に置き換えてください。

Shell
sudo /opt/bitnami/letsencrypt/scripts/generate-certificate.sh -m YOURMAIL -d YOURDOMAIN -d www.YOURDOMAIN
https://debugging-code.com/wp-content/uploads/2019/02/アイコン.png
もびるど

私はなぜかこの方法ではうまく設定されませんでした。
以下に手動で行うための手順を記載します。
私はこの方法で設定しました。

手順1:Legoクライアントをインストールする

Legoクライアントを使うことで、Let’s Encrypt の証明書を簡単に行うことができます。手順は以下の通りです。

  • Lightsailから、”SSLを使用して接続”を押して、コンソールにログインする。
  • curlコマンドを実行して、Legoクライアントをインストールする。
  • tarでダウンロードしたファイルを解凍する。
  • X.Y.Zには、実際のバージョン番号で置き換えるのを忘れずに。
コンソール
cd /tmp curl -s https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -
tar xf lego_vX.Y.Z_linux_amd64.tar.gz
sudo mv lego /usr/local/bin/lego

手順2:ドメインの証明書を暗号化する

注:この手順を進める前に、ドメイン名がBitnamiアプリケーションホストのパブリックIPアドレスを指していることを確認してください。

次のステップでは、自分のドメインのLet’s Encrypt証明書を生成します。

  • すべてのBitnamiサービスを無効にする
コンソール
sudo /opt/bitnami/ctlscript.sh stop
  • 以下のように、ドメインの新しい証明書を要求する(wwwプレフィックスの有無にかかわらず)。
  • DOMAINを実際のドメイン名に置き換え、EMAIL-ADDRESSをメールアドレスに置き換えてください。
コンソール
sudo lego --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/etc/lego" run

注記:指定するドメインの数だけ-domainsオプションを指定することにより、複数のドメイン(たとえば、DOMAINおよびwww.DOMAIN)を使用できます。

  • 利用規約に同意します。

/etc/lego/certificatesディレクトリに、一連の証明書が生成されるようになりました。

手順3:Let’s Encrypt証明書を使用するようにWebサーバーを構成する

次に、Webサーバーに新しい証明書を次のように伝えます。

  • 使用しているWebサーバーに応じて、新しいSSL証明書と証明書キーファイルを正しい場所にリンクします。rootユーザーだけが読み取り可能にするために、ファイルのアクセス許可を更新します。DOMAINを実際のドメイン名に置き換えてください。

Apacheの場合:

コンソール
sudo mv /opt/bitnami/apache2/conf/server.crt/ opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old
sudo ln -s /etc/lego/certificates/DOMAIN.key /opt/bitnami/apache2/conf/server.key
sudo ln -s /etc/lego/certificates/DOMAIN.crt /opt/bitnami/apache2/conf/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/server*
sudo chmod 600 /opt/bitnami/apache2/conf/server*

NGINXの場合:

コンソール
sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old
sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
sudo mv /opt/bitnami/nginx/conf/server.csr /opt/bitnami/nginx/conf/server.csr.old
sudo ln -s /etc/lego/certificates/DOMAIN.key /opt/bitnami/nginx/conf/server.key
sudo ln -s /etc/lego/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/server.crt
sudo chown root:root /opt/bitnami/nginx/conf/server*
sudo chmod 600 /opt/bitnami/nginx/conf/server*

ヒント:BitnamiスタックがApacheまたはnginxを使用しているかどうかを調べるには、コマンドsudo /opt/bitnami/ctlscript.sh statusの出力を確認してください。

  • すべてのBitnamiサービスを再起動します。
コンソール
sudo /opt/bitnami/ctlscript.sh start

手順4:構成をテストする

https://DOMAINにアクセスしてください(DOMAINを正しいドメイン名に置き換えてください)。

ブラウザのアドレスバーにある南京錠のアイコンが表示されていることを確認してください。 この南京錠のアイコンをクリックすると、ドメインとSSL証明書の詳細が表示されます。 この一連の作業ができれば設定完了です。

手順5:Let’s Encrypt証明書を更新する

暗号化しようとする証明書は90日間有効です。有効期限が切れる前に証明書を更新するには、サーバーコンソールからbitnamiユーザーとして次のコマンドを実行します。DOMAINを実際のドメイン名に置き換え、EMAIL-ADDRESSをメールアドレスに置き換えてください。

コンソール
sudo /opt/bitnami/ctlscript.sh stop
sudo lego --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/etc/lego" renew
sudo /opt/bitnami/ctlscript.sh start

失敗する場合: 私はこの方法だと以下のようなエラーが発生しました。

コンソール
You have to pass an account (email address) to the program using --email or -m

その場合、legoのバージョンアップを行うことで解決します。以下コマンドを打ってバージョンアップしてください。

コンソール
cd /tmp rm -rf lego* curl -s https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i - tar xf 
lego_vX.Y.Z_linux_amd64.tar.gz sudo mv lego /usr/local/bin/lego
参考 Let’s Encrypt SSL Certificate not renewing参考URL

有効期限が切れる前に証明書を自動的に更新するには、上記のタスクを実行するシェルスクリプトを作成し、定期的にスクリプトを実行するcronジョブをスケジュールします。手順を以下に記載します。

  • /etc/lego/renew-certificate.shに次の内容のスクリプトを作成します。DOMAINを実際のドメイン名に置き換え、EMAIL-ADDRESSをメールアドレスに置き換えてください。
Shell
#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop apache
sudo /usr/local/bin/lego --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/etc/lego" renew
sudo /opt/bitnami/ctlscript.sh start apache
  • スクリプトを実行可能にする:
コンソール
chmod +x /etc/lego/renew-certificate.sh
  • 次のコマンドを実行してcrontabエディタを開きます。
コンソール
sudo crontab -e
  • crontabファイルに次の行を追加して保存します。
コンソール
0 0 1 * * /etc/lego/renew-certificate.sh 2> /dev/null

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です