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で保護されています。