Debian 11 (bullseye) - Let’s Encrypt で常時 SSL 化(on Nginx)!
Updated:
Debian GNU/Linux 11 (bullseye) に構築した Web サーバ Nginx への接続を、 Let’s Encrypt で取得した SSL サーバ証明書で常時 SSL 化するための方法についての記録です。
(当然ながら、興味がなければスルーしてください)
0. 前提条件
- Debian GNU/Linux 11 (bullseye; 64bit) での作業を想定。
- クライアント側も Debian GNU/Linux 11 (bullseye; 64bit) を想定。
- Web(HTTP)サーバ Nginx が「Debian 11 (bullseye) - Web サーバ Nginx 構築(Nginx 公式リポジトリ使用)!」の方法で導入済みであることを想定。
- Nginx 1.21.3 での作業を想定。(稼働していること。稼働していない場合は方法が若干異なる)
- ACME(Automatic Certificate Management Environment) クライアントに Certbot を使用することを想定。
- バーチャルホストは使用しない。
- root ユーザでの作業を想定。
1. ACME クライアント Certbot のインストール
# apt -y install certbot
# certbot --version
certbot 1.12.0
- 当記事執筆時点、 1.12.0 がインストールされた。
2. ポートの開放
ドメイン所有者の認証のために TCP ポートの 80 番と 443 番に接続されるので、開放されてなければ開放しておく。
ufw コマンドによるポート開放については、過去記事「Debian 11 (bullseye) - ファイアウォール設定!」を参照。
3. Certbot クライアントの起動
証明書発行のために Certbot クライアントを起動する。ドキュメントルートにするディレクトリが存在しなければ、作成しておく。
# mkdir -p /var/www/html
# certbot certonly --webroot -w /var/www/html -d example.jp -d www.example.jp
example.jp
,www.example.jp
は自分のものに置き換えること。- 起動後の設定は次項。
4. メールアドレス等の設定
メールアドレスの登録と利用条件への同意を行う。(初回のみ)
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): webmaster@example.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for example.jp and www.example.jp
Performing the following challenges:
http-01 challenge for example.jp
http-01 challenge for www.example.jp
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
- ルータでポート開放してからでないと失敗する。
5. SSL/TLS サーバ証明書の取得完了
しばらく待つと、SSL/TLS サーバ証明書の取得プロセスが完了する。
- サーバ証明書の実体(ファイル)は、
/etc/letsencrypt/archive/ドメイン名
ディレクトリ配下に保存される。- サーバ証明書(公開鍵) …
certN.pem
- 中間証明書 …
chainN.pem
- サーバ証明書と中間証明書の結合ファイル …
fullchainN.pem
- 秘密鍵 …
privkeyN.pem
- サーバ証明書(公開鍵) …
- シンボリックリンクは、
/etc/letsencrypt/live/ドメイン名
ディレクトリ配下に保存される。- サーバ証明書(公開鍵) …
cert.pem
- 中間証明書 …
chain.pem
- サーバ証明書と中間証明書の結合ファイル …
fullchain.pem
- 秘密鍵 …
privkey.pem
- サーバ証明書(公開鍵) …
- SSL/TLS サーバ証明書の取得に失敗した場合は、ポート開放等の設定を再確認する。
6. Nginx 設定ファイルの編集
環境により設定ファイルの配置ディレクトリやファイル名、記述方法等が異なるかもしれない。適宜置き換えること。
File: /etc/nginx/conf.d/default.conf
File: /etc/nginx/conf.d/ssl.conf
7. Nginx 設定ファイルの文法チェック
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
問題があれば、設定ファイルの内容を見直す。
8. Web サーバ の再起動
# systemctl restart nginx
9. 証明書の更新
Certbot にはタイマーが搭載されているので、自動で定期的に証明書が更新される。
Certbot タイマーの詳細を確認するなら、以下を実行。
# systemctl status certbot.timer
# systemctl list-timers certbot.timer --no-pager
# systemctl cat certbot.timer
# systemctl cat certbot.service
タイマーによる更新でなく、手動で更新したい場合は以下を実行。
# certbot renew
10. 参考サイト
以上。
Comments