AlmaLinux9でWebサーバにNginxを使いLet's EncryptでSSL/TLS証明書を取得する方法です。
Nginx
NginxのインストールとhttpでWebサイトが表示できるまでの設定を行っていきます。
今回は、mail.server-memo.netのSSL/TLS証明書を取得した際の工程を例として説明をしていきます。
インストール
※Nginxがすでにインストールされている場合は、こちらの工程はスキップしてください。
Nginxのインストール方法は、下記のページで説明していますので参照願います。
https://www.server-memo.net/server-setting/nginx/almalinux9_nginx_install.html
Nginx設定ファイル作成
※Nginxの設定がすで完了している場合は、この工程をスキップしてください。
webサイトのデータを格納するディレクトリを作成します。
今回はディレクトリ名をmailとしていますが、ディレクトリの名前はお好きに作成してください。
# mkdir /usr/share/nginx/mail # chown nginx:nginx /usr/share/nginx/mail # chmod 755 /usr/share/nginx/mail
Nginxの設定ファイルを作成します。
設定ファイルの名前も最後が.confであれば良いので、好きな名前で作成してください。
# cd /etc/nginx/conf.d/ # vi mail.server-memo.net.conf
設定はhttpでアクセスできるようにするための最低限のもとなります。
server { listen 80; server_name mail.server-memo.net; root /usr/share/nginx/mail; index index.html; }
動作確認用ページの作成
動作確認用のページを作成します。
# vi /usr/share/nginx/mail/index.html
内容は適当にIndex Pageとか記述しておいてください。
設定反映
Nginxを再起動して設定を反映させます。
# systemctl restart nginx
動作確認
webブラウザでアクセスして、先程作成したページが表示されることを確認してください。
certbotインストール
Let's EncryptでSSL/TLS証明書を取得する際に使用するcertbotをインストールします。
# dnf install -y certbot python3-certbot-nginx
SSL/TLS証明書自動更新設定
証明書の自動更新を行う設定を有効化します。
# systemctl enable --now certbot-renew.timer
SSL/TLS証明書の取得
certbotを実行して証明書をするための書式は下記のとおりです。
# certbot --nginx -d ホスト名 -m 連絡先メールアドレス --agree-tos
指定しているオプションについての説明です。
--nginx
nginxの設定ファイルをcertbotが編集- -d 証明書を取得するホスト名
- -m 連絡先メールアドレス
- --agree-tos 利用規約に同意
証明書の取得例
下記の内容で証明書を取得します。
- ホスト名: mail.server-memo.net
- 連絡先メールアドレス: tamohiko@server-memo.net
# certbot --nginx -d mail.server-memo.net -m tamohiko@server-memo.net --agree-tos Saving debug log to /var/log/letsencrypt/letsencrypt.log Requesting a certificate for mail.server-memo.net Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/mail.server-memo.net/fullchain.pem Key is saved at: /etc/letsencrypt/live/mail.server-memo.net/privkey.pem This certificate expires on 2024-02-27. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for mail.server-memo.net to /etc/nginx/conf.d/mail.server-memo.net.conf Congratulations! You have successfully enabled HTTPS on https://mail.server-memo.net - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
証明書の格納場所
取得した証明書は表示されたメッセージにもあるとおり、「/etc/letsencrypt/live/ホスト名」といったディレクトリに格納されます。
ただし、ここにある証明書は実際には「/etc/letsencrypt/archive/ホスト名/」ディレクトリにある証明書へのシンボリックリンクとなっています。
# ls -la /etc/letsencrypt/live/mail.server-memo.net/ total 12 drwxr-xr-x 2 root root 4096 Nov 29 23:12 . drwx------ 7 root root 4096 Nov 29 23:12 .. lrwxrwxrwx 1 root root 44 Nov 29 23:12 cert.pem -> ../../archive/mail.server-memo.net/cert1.pem lrwxrwxrwx 1 root root 45 Nov 29 23:12 chain.pem -> ../../archive/mail.server-memo.net/chain1.pem lrwxrwxrwx 1 root root 49 Nov 29 23:12 fullchain.pem -> ../../archive/mail.server-memo.net/fullchain1.pem lrwxrwxrwx 1 root root 47 Nov 29 23:12 privkey.pem -> ../../archive/mail.server-memo.net/privkey1.pem -rw-r--r-- 1 root root 692 Nov 29 23:12 README
証明書を更新した場合、実物の証明書ファイルはファイル名の数字部分を変更して新しく作成されます。
このとき「/etc/letsencrypt/live/ホスト名」にあるシンボリックリンクは、更新されて新しく作成された証明書へリンクされます。
そのため、実物の証明書は名前が変更されていますが、シンボリックの名前は変更されていなのでNginxで指定している証明書の名前も変更の必要がなくなります。
Nginx設定ファイルの自動編集について
--nginx
オプションを指定して証明書を取得すると、httpsで接続出来るようにNginxの設定ファイルがcertbotによって自動的に編集されます。
certbotが編集した部分には、下記のように「# managed by Certbot」と表記されています。
server { server_name mail.server-memo.net; root /usr/share/nginx/mail; index index.html; listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/mail.server-memo.net/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mail.server-memo.net/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = mail.server-memo.net) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name mail.server-memo.net; return 404; # managed by Certbot }
動作確認
webブラウザでhttpsを使って先程作ったページにアクセスできることを確認してください。
アクセスできることが確認できたら、Webブラウザで証明書の内容にも間違いがないか合わせて確認を行っておいてください。
コメント