【AlmaLinux9】Let’s EncryptでSSL/TLS証明書を取得する方法(Nginx + certbot)

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ブラウザで証明書の内容にも間違いがないか合わせて確認を行っておいてください。

コメント

タイトルとURLをコピーしました