Amazon Linux 2023 にcertbotを入れてWEBサーバーのTLS化をしてみた。

Amazon Linux 2023 で稼働しているWEBサイトをTLS化します。サーバー証明書が必要なので無料で取得が出来る Let's Encrypt のサーバー証明書を取得します。Let's Encrypt でサーバー証明書を取得するにはcertbotアプリをインストールする必要があります。

Amazon Linux 2023 のリポジトリ(/etc/yum.repos.d/amazonlinux.repo)にはcertbotが含まれているので、すぐにインストールができます。インストールはrootユーザーで行います。

# dnf install certbot

インストールが完了したらバージョンを確認してみます。

# certbot --version
certbot 2.6.0

2024年6月時点で ver.2.6.0 のようです。

事前準備としてポート80と443を開けておきます。以下はLightsailのファイアウォールの設定画面の例です。

certbotを使ってサーバー証明書を取得します。以下のコマンドを入力します。

# certbot certonly --webroot -w /var/www/html/example -d www.example.com

引数の意味ですが、以下です。

certonly
サーバー証明書を取得する。ApacheやNginxなどのWEBサーバーの設定ファイルの書き換えはしない。

--webroot -w パス指定
認証のために Let's Encrypt 側からアクセスをしてきて、ここに一時的に作成されたファイルを(Let's Encrypt 側が)確認する。トップページ(index.htmlを配置する場所)にすると良いと思われる。

-d ドメイン名
サーバー証明書を取得するドメイン名を指定する。

コマンドを実行したときのログのイメージです。途中で質問をされます。

① 連絡先のEメールアドレスを入力します。証明書の期限切れが近づくとメールが届きます。

② 同意するかどうかの確認です。ここは同意(Y)を入力します。

③ Electronic Frontier Foundation にEメールアドレスを公開するかどうか確認をされます。公開したくなければ(N)を入力します。

Successfully received certificate.と表示されていればサーバー証明書が発行されました。④の fullchain.pem がサーバー証明書です。⑤の privkey.pem が秘密鍵です。なお秘密鍵はrootでしかアクセスできません。④、⑤のファイルはWEBサーバーのTLS化の設定に必要なものです。

WEBサーバー側の設定をします。Nginxの例です。NginxでTLS化に必要な設定は以下です。

① listen ディレクティブで443ポートを指定して、sslパラメータを付与してTLSを有効にします。

② server_name ディレクティブでドメイン名を指定します。

③ ssl_certificate ディレクティブでサーバー証明書を指定します。

④ ssl_certificate_key ディレクティブで秘密鍵を指定します。

nginx -t コマンドでコンフィグの確認をします。

# nginx -t

問題がなければnginxを再起動します。

# systemctl restart nginx

「https://www.example.com」でウェブサイトにアクセスしてブラウザに鍵のマークがついていればTLSで保護されています。

AWSのLightsailでプランのアップグレードをしてみた。

Lightsailでプランのアップグレードをしてみました。5ドルのプラン(500Mメモリ、20Gディスク)から、7ドルのプラン(1Gメモリ、40Gディスク)に変更します。

変更前の Amazon Linux 2023 のリソース状況です。

まずは、稼働しているインスタンスを停止させます。管理コンソールからインスタンスの停止を行います。

「インスタンスを停止しますか?」のダイアログが表示されるので停止を押下します。ダイアログにも書いてあるとおりインスタンスを停止しただけでは課金されてしまうため、プランの変更が終わったらインスタンスは削除するようにします。

インスタンスが停止したら停止したインスタンスをクリックします。

スナップショットタブから「スナップショットの作成」をクリックします。

スナップショットに名前をつけて作成をクリックします。名前は自動で生成されていますので、任意で変更可能です。

スナップショットの作成が始まります。少しだけ待ちます。

スナップショットの作成ができたら、右側の縦の点線をクリックします。

リストが表示されるので「新規インスタンスの作成」を選択します。

新規インスタンスの選択画面になりますので、任意のプランを選びます。今回は7ドルのプランにしました。

画面の下部に移動してインスタンスに名前をつけます。「インスタンスの作成」を押下します。

新しいインスタンスが作成されます。新しいインスタンスは保留中の状態です。古い方のインスタンスをクリックします。

ネットワーキングタブからIPアドレスのデタッチを行います。デタッチをクリックします。

「デタッチしますか?」の確認のダイアログが出ますので「デタッチします」を押下します。

新しいインスタンスのほうのネットワーキングタブを選択します。「静的IPをアタッチする」をクリックします。

静的IPをアタッチする画面が出ますので、古いインスタンスに紐づけていた静的IPを選択します。アタッチを押下します。

静的IPがアタッチされましたと表示されたら「続行する」を押下します。

ファイアウォールの設定ですが、デフォルトに戻っているので追加するものがあれば必要に応じて追加をします。

新しいインスタンスに静的IPをアタッチすると、インスタンスは実行中になるようです。SSHで接続可能になっているため接続を確認します。初回接続のときはクライアント側の known_hosts ファイルには新しいインスタンスのフィンガープリントはありませんので、接続を続行してもよいかのメッセージ(以下)が出ます。yesとすれば続行できます。

The authenticity of host ‘xxx.xxx.xxx.xxx’ can’t be established.
ECDSA key fingerprint is SHA256:・・・.
Are you sure you want to continue connecting(yes/no[fingerprint])?

新しいインスタンスでリソース状況を見てみました。メモリ、ディスクとも増えています。ただメモリのavailableが少ないのは気になります。

メトリクスグラフを見てみると、問題はなさそうです。

新しいインスタンスでの正常稼働が確認できたら、古いインスタンスは削除しておきます。古いインスタンスの右側の縦点線をクリックして削除を選択します。

古いインスタンスの表示がなくなれば完了です。

スナップショットですが、課金対象(1GB/月 あたり0.05 USD)であるため不要であれば削除します。スナップショットタブを選び、表示されているスナップショットの右側の縦点線をクリックして、スナップショットの削除をしておきましょう。