Amazon Linux2023のWEBサイトSSL化
作業にはroot権限が必要だよ
1.Pythonのインストール
dnf install -y python3 augeas-libs pip
入っていたら、「入ってるよ」と返って来るだけなので気にせず叩く。
2.certbotのインストール
Let's Encriptを利用した無料SSLの場合に実施する。
python3 -m venv /opt/certbot/
/opt/certbot/bin/pip install --upgrade pip
/opt/certbot/bin/pip install certbot
シンボリックリンクを張る
ln -s /opt/certbot/bin/certbot /usr/bin/certbot
3.認証に80ポートを利用するため、WEBサーバを停止する
そもそも動いていなくても、影響がないためコマンドを実行する。
・nginx
systemctl stop nginx
・apache
systemctl stop httpd
certbot実行
certbot certonly --standalone
以下の問が来るためそれぞれ回答する。
1) 証明書の期限切れを通知するメールアドレス -> メールアドレスを入力。
2) 利用規約に同意しますか? -> y(同意)
3) メールアドレス情報を共有しますか? -> n(共有しない)
4) 証明書に記載するドメイン名を入力してください。-> example.com(ドメイン名を入力)
Successfully received certificate. と出力されれば完了。
これで SSL 証明書が取得でき、/etc/letsencrypt/live/{ドメイン名}配下に作成されます。
5.confファイル編集
・nginx
server {
...
server_name example.com;
root /var/www/html;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # ★
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ★
...
}
★がついている行、example.comを、4.で指定したドメイン名に変更する。
・apache
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem # ★
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # ★
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem # ★
</VirtualHost>
★がついている行、example.comを、4.で指定したドメイン名に変更する。
6.サーバ起動
・nginx
systemctl start nginx
・apache
systemctl start httpd
7.cron設定(自動更新)
Let's Encriptの証明書は3ヶ月で有効期限が切れるため、自動更新を設定しておくと期限切れを防げる。
なお、Amazon Linux2023にはデフォルトでcronが存在しないため、導入してから本作業を実施する。
導入参考:https://note.com/santavillage/n/nf7e9c98ff06f
crontab -e
・nginx
30 1 * * * root certbot renew --post-hook "systemctl reload nginx" --no-self-upgrade # Nginx
・apache
30 1 * * * root certbot renew --post-hook "systemctl reload httpd" --no-self-upgrade # Apache
エラーが気にならないなら両方記述しても問題はないけど。