Let’s EncryptでSSL証明書の設定

XserverのVPSサーバー(Ubuntu)に無料のSSL証明書を設定するために、Let’s Encryptをインストールしてみたいと思います。

目次

certbotのインストール

証明書を取得するためのクライアントツール python3-certbot-nginx をインストールします。

sudo apt install certbot python3-certbot-nginx

証明書の取得

取得方法

証明書の取得方法は下記の様になります。

sudo certbot --nginx -d your-domain.com -d www.your-domain.com

取得例

今回は、https://maria.winroad.biz でMariaDBのphpMyAminのページが開くように設定してみたいと思います。

公開ディレクトリドメイン名備考
/usr/share/phpmyadminmaria.winroad.bizMariaDBのphpMyAdmin

上記の内容で証明書を取得すると下記の様になります。尚、上記例と違い www.maria.winroad.bizのドメインは作成していないので、maria.winroad.bizのみの作成になります。

sudo certbot --nginx -d maria.winroad.biz

下記の様にSuccessfullyと表示されたらOKです。

$ sudo certbot --nginx -d maria.winroad.biz

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for maria.winroad.biz

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/maria.winroad.biz/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/maria.winroad.biz/privkey.pem
This certificate expires on 2024-01-10.
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 maria.winroad.biz to /etc/nginx/sites-enabled/maria
Congratulations! You have successfully enabled HTTPS on https://maria.winroad.biz

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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/Maria.winroad.biz

証明書内容
cert.pemSSLサーバー証明書(公開鍵含む)
chain.pem中間証明書
fullchain.pemcert.pem と chain.pem が結合されたファイル
privkey.pem公開鍵に対する秘密鍵

確認

それでは、実際に確認してみましょう。sudo権限では、保管場所まで行けないので、rootに変更して見てみます。

su -
cd /etc/letsencrypt/live/maria.winroad.biz
ls -la

下記の様に各証明書が保存されているはずです。

root root  README
root root   cert.pem -> ../../archive/maria.winroad.biz/cert1.pem
root root   chain.pem -> ../../archive/maria.winroad.biz/chain1.pem
root root   fullchain.pem -> ../../archive/maria.winroad.biz/fullchain1.pem
root root   privkey.pem -> ../../archive/maria.winroad.biz/privkey1.pem

証明書の更新

取得済みの証明書を更新する場合は以下のように実行します。

有効期限が 30日未満の証明書を全て更新

 sudo certbot renew

有効期限の残り日数に関わらず更新したい場合

 sudo certbot renew --force-renewal

–force-renewal オプションは、証明書を強制的に更新するオプションです。通常、certbot は証明書が期限近くになった場合のみ更新を行いますが、–force-renewal を使用するとその制限が無視され、証明書が即座に更新されます。

注意事項

  • Let’s Encrypt などの証明書発行機関は一定時間内に発行または更新できる証明書の数に制限をかけています。頻繁に –force-renewal を使用すると、これらの制限に達する可能性があります。
  • 予期せぬタイミングで証明書が更新されるため、サービスに短時間の中断が発生する可能性があります。
  • 証明書が新しくなると、既存の設定やカスタマイズが上書きされる可能性があります。
  • このオプションは、テスト環境や緊急のセキュリティ対策、証明書の設定変更など、特定の状況で必要な場合にのみ使用するべきです。不必要に使用すると、上記のような問題が発生する可能性があります。

更新プロセスのテスト

下記のコマンドは、実際には証明書を更新せず、更新プロセスをテストします。

sudo certbot renew --dry-run

証明書の自動更新

cron.dディレクトリに設定ファイルを作成する

/etc/cron.dディレクトリの下に拡張子のない設定ファイルを配置することで、crontabコマンドで設定した場合と同様のことを行うことが出来ます。

既存のcronファイル

まずは既存のcronファイルを見てみましょう。

ls -la /etc/cron.d
drwxr-xr-x   2 root root 4096  7月  8 10:04 ./
drwxr-xr-x 101 root root 4096  7月  8 10:03 ../
-rw-r--r--   1 root root  102  3月 23  2022 .placeholder
-rw-r--r--   1 root root  775  9月 15  2018 certbot
-rw-r--r--   1 root root  201  1月  9  2022 e2scrub_all
-rw-r--r--   1 root root  712  7月 13  2022 php

テンプレのコピー

まず最初にcrontabのテンプレからからssl_renew を作成します。

sudo cp /etc/crontab /etc/cron.d/ssl_renew

設定編集

sudo vim /etc/cron.d/ssl_renew

root 権限でSSL証明書を自動更新します。

#毎月1日の午前3時にSSL証明書を更新&nginxの再起動
00 03 01 * * root certbot renew && systemctl restart nginx

Nginxの設定

phpMyAdminでMariaDBを操作するための環境設定ファイルを作成します。

sudo vim /etc/nginx/sites-available/maria

下記の内容を maria ファイルに記述します。

server {
    server_name maria.winroad.biz;

    root /usr/share/phpmyadmin/;
    index index.php index.html index.htm index.nginx-debian.html;
    access_log /var/log/nginx/phpmyadmin_access.log;
    error_log /var/log/nginx/phpmyadmin_error.log;

    location / {
        try_files $uri $uri/ /index.php;
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }

    location ~ ^/(doc|sql|setup)/ {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        include snippets/fastcgi-php.conf;
    }

    location ~ /\.ht {
        deny all;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/maria.winroad.biz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/maria.winroad.biz/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 = maria.winroad.biz) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    listen [::]:80;
    server_name maria.winroad.biz;
    return 404; # managed by Certbot
}

設定ファイルの説明

この設定ファイルは、maria.winroad.bizドメインを用いて、phpMyAdmin を安全かつ効率的にホストするように作成されています。以下は、設定ファイルの主要な部分とその機能についての詳細です。

  • 2行目:サーバー名がmaria.winroad.biz であると記述しています。
  • 4〜7行目:ドキュメントルートが /usr/share/phpmyadmin/ で、indexファイルはindex.php であると記述しています。index.html 以降は、index.phpが見当たらなかったときの indexファイル名を表示しています。又、アクセスログとエラーログの場所も表示しています。
  • 9〜13行目:Basic認証について記述されていて、認証データは /etc/nginx/.httpasswd に保存されています。
  • 15〜17行目:アクセス拒否のファイル名が記述されています。
  • 19〜24行目:PHPの設定が記述されています。Unixソケットを介して、php-fpmに渡されます。
  • 30〜35行目:SSL証明書の設定が記述されています。443番ポートでのリスニングを設定し、SSL証明書と鍵のパスを指定しています。
  • 38〜47行目:HTTPからHTTPSへのリダイレクションが設定されています。80番ポートでのリクエストは、443番ポート(HTTPS)に301リダイレクションされます。

これらの設定により、phpMyAdminへのアクセスはセキュアかつ効率的に制御され、ユーザーはHTTPSを通じて安全にアクセスできます。

設定の確認

最後にブラウザで確認してください。

http://maria.winroad.biz

httpsに転送されて、下記の様に鍵マークが表示されていたら、OKです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次