Let’s Encryptで無料SSL証明書を設定する手順

ウェブサイトのセキュリティを無料で強化するなら、Let’s EncryptのSSL証明書をNginxに設定するのが最適解です。この方法でHTTPS化すれば、SEO評価の向上だけでなく、ユーザーの信頼性も高まります。本記事では、実務で使える具体的な手順とトラブルシューティングを、画像付きで丁寧に解説します。初心者でも1時間で完了できる内容です。
目次
Let’s Encrypt SSL証明書設定の準備
Let’s EncryptでSSL証明書を発行する前に、以下の条件を満たしていることを確認してください。
必要な条件
- ドメイン名の取得:既に独自ドメインを所有していること(例: example.com)
- DNS設定:ドメインのAレコードがサーバーのIPアドレスに正しく解決されていること
- Nginxのインストール:WebサーバーとしてNginxが稼働していること
- ポート開放:サーバーの80番(HTTP)と443番(HTTPS)ポートが開放されていること
- sudo権限:サーバーにrootまたはsudo権限を持つユーザーでログインできること
これらの条件を満たしていない場合は、先に対応してください。特にDNS設定は、Let’s Encryptの認証プロセスで重要な役割を果たします。
サーバー環境の確認
以下のコマンドでNginxとOSのバージョンを確認します。
# Nginxバージョン確認
nginx -v
OSバージョン確認(Ubuntu/Debianの場合)
lsb_release -a
OSバージョン確認(CentOS/RHELの場合)
cat /etc/redhat-release
Let’s EncryptのCertbotは、主にUbuntu/DebianとCentOS/RHELで動作します。本記事では、Ubuntu 22.04 LTSを前提に解説しますが、他のディストリビューションでも基本的な手順は同じです。
ファイアウォールの設定
サーバーのファイアウォール(ufw)でHTTP/HTTPSポートを開放します。
# ufwの状態確認
sudo ufw status
HTTP(80)とHTTPS(443)を許可
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
ufwを有効化
sudo ufw enable
ファイアウォールが有効になっていない場合は、以下のコマンドで無効化できます(セキュリティ上推奨されません)。
sudo ufw disable
Certbotのインストールと設定
Let’s EncryptのSSL証明書を発行するには、Certbotという公式クライアントツールを使用します。Certbotは、ドメインの所有権を確認するための自動化プロセスを提供しています。
Certbotのインストール
Ubuntu/Debianの場合は、以下のコマンドでCertbotをインストールします。
# 既存のパッケージを更新
sudo apt update
sudo apt upgrade -y
CertbotとNginx用プラグインをインストール
sudo apt install certbot python3-certbot-nginx -y
CentOS/RHELの場合は、EPELリポジトリを有効化してからインストールします。
# EPELリポジトリを有効化
sudo dnf install epel-release -y
Certbotをインストール
sudo dnf install certbot python3-certbot-nginx -y
Certbotの動作確認
Certbotが正しくインストールされたことを確認します。
certbot --version
出力例:certbot 2.6.0
Nginxの設定ファイル確認
Let’s Encryptは、ドメインの所有権を確認するために、一時的なHTTPリクエストを送信します。そのため、Nginxの設定ファイルが正しく設定されている必要があります。
以下のコマンドで、Nginxの設定ファイルが存在するディレクトリに移動します。
cd /etc/nginx/sites-available/
設定ファイルの例(example.com.conf)を以下に示します。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
この設定ファイルが存在しない場合は、以下の手順で作成します。
# 設定ファイルを作成
sudo nano /etc/nginx/sites-available/example.com.conf
設定を貼り付け(example.comを自分のドメインに置き換え)
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
設定ファイルを有効化
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Nginxを再起動
sudo systemctl restart nginx
設定ファイルを作成したら、Nginxの設定をテストします。
sudo nginx -t
出力例:nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
テストが成功したら、Nginxを再起動します。
sudo systemctl restart nginx
NginxのSSL設定と証明書適用
Certbotを使用して、Let’s EncryptからSSL証明書を発行します。Certbotは、自動的にNginxの設定ファイルを更新して、HTTPSリダイレクトを設定します。
SSL証明書の発行
以下のコマンドで、Certbotを実行してSSL証明書を発行します。
sudo certbot --nginx -d example.com -d www.example.com
このコマンドは、以下の処理を自動で行います。
- Let’s Encryptサーバーにドメインの所有権を確認するリクエストを送信
- SSL証明書の発行とダウンロード
- Nginxの設定ファイルを更新してHTTPSを有効化
- HTTPからHTTPSへのリダイレクトを設定
実行中に、以下の質問が表示されます。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): your-email@example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing 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: N
上記の質問に回答すると、Certbotは自動的にSSL証明書を発行してNginxの設定を更新します。成功すると、以下のメッセージが表示されます。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2024-12-31. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- 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
Nginxの設定ファイル確認
Certbotが自動で更新したNginxの設定ファイルを確認します。以下のコマンドで、設定ファイルを開きます。
sudo nano /etc/nginx/sites-available/example.com.conf
設定ファイルの例(HTTPS設定が追加されている)を以下に示します。
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
この設定ファイルでは、以下の点が重要です。
- HTTPからHTTPSへのリダイレクト:80番ポートでHTTPリクエストを受け取ると、自動的にHTTPSにリダイレクトされます。
- SSL証明書のパス:Let’s Encryptが発行した証明書と秘密鍵のパスが指定されています。
- 暗号スイートの設定:安全な暗号スイートが設定されています。
Nginxの再起動
設定ファイルを更新したら、Nginxを再起動して変更を反映します。
sudo systemctl restart nginx
SSL証明書の有効性確認
SSL証明書が正しく適用されていることを確認します。以下のコマンドで、証明書の詳細を表示します。
sudo openssl x509 -noout -text -in /etc/letsencrypt/live/example.com/fullchain.pem
また、オンラインのSSLチェッカー(例: SSL Labs)を使用して、証明書の有効性を確認することもできます。
ブラウザで自分のウェブサイトにアクセスし、アドレスバーに鍵マーク(🔒)が表示されていれば、SSL証明書が正しく適用されています。
SSL証明書の自動更新設定
Let’s EncryptのSSL証明書は、90日間で有効期限が切れます。そのため、自動更新の設定が必要です。Certbotには、自動更新を行うためのコマンドが用意されています。
自動更新の仕組み
Certbotは、cronジョブを使用して定期的に証明書の有効期限を確認し、必要に応じて更新します。デフォルトでは、30日ごとに自動更新が実行されます。
自動更新のテスト
以下のコマンドで、自動更新が正しく動作するかテストします。
sudo certbot renew --dry-run
このコマンドは、実際に証明書を更新することなく、自動更新プロセスをシミュレーションします。成功すると、以下のメッセージが表示されます。
...
- - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - -
cronジョブの設定
自動更新を有効にするために、cronジョブを設定します。以下のコマンドで、crontabファイルを開きます。
sudo crontab -e
ファイルの最後に、以下の行を追加します。
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
この設定は、毎日午前3時に自動更新を実行し、更新が成功した場合にNginxを再読み込みします。--quietオプションは、ログ出力を抑制します。
cronジョブを保存したら、以下のコマンドでcronサービスを再起動します。
sudo systemctl restart cron
自動更新のログ確認
自動更新が正しく動作していることを確認するために、ログを確認します。
sudo tail -f /var/log/letsencrypt/letsencrypt.log
ログには、自動更新の実行結果が記録されます。例えば、以下のようなメッセージが表示されます。
2024-01-01 03:00:01,000:DEBUG:certbot.renewal:Auto-renewal forced for: example.com
2024-01-01 03:00:01,000:INFO:certbot.renewal:Processing example.com
2024-01-01 03:00:01,000:DEBUG:certbot.plugin:Running post-hook command: systemctl reload nginx
よくあるトラブルと解決策
Let’s EncryptでSSL証明書を設定する際に、以下のようなトラブルが発生することがあります。それぞれの解決策を紹介します。
1. ドメインのDNS設定…
症状:Certbot実行時に「Could not resolve host」や「DNS problem」のエラーが発生する。
解決策:
- ドメインのDNS設定を確認し、AレコードがサーバーのIPアドレスに正しく解決されていることを確認します。
- DNSの変更が反映されるまで待ちます(最大24時間)。
- 以下のコマンドでDNSの解決を確認します。
dig example.com +short
nslookup example.com
2. ポート80または44…
症状:Certbot実行時に「Connection refused」や「Timeout」のエラーが発生する。
解決策:
- ファイアウォール(ufw)やサーバーのセキュリティグループ(AWS EC2など)で、ポート80と443が開放されていることを確認します。
- 以下のコマンドでポートの開放状態を確認します。
sudo ufw status
sudo netstat -tulnp | grep nginx
3. Nginxの設定ファ…
症状:Certbot実行後にNginxが起動しない、またはHTTPからHTTPSへのリダイレクトが機能しない。
解決策:
- Nginxの設定ファイルを確認し、構文エラーがないかチェックします。
- 以下のコマンドでNginxの設定をテストします。
sudo nginx -t
エラーが表示された場合は、設定ファイルを修正して再度テストします。
4. SSL証明書の発行に…
症状:Certbot実行時に「Failed authorization procedure」のエラーが発生する。
解決策:
- Let’s Encryptのレート制限に引っかかっていないか確認します。レート制限については、公式ドキュメントを参照してください。
- 一時的に他のサーバーやプロキシ(Cloudflareなど)がDNSを上書きしていないか確認します。
- Certbotに
--stagingオプションを付けてテスト実行します。
sudo certbot certonly --staging -d example.com -d www.example.com
5. 自動更新が機能しない
症状:cronジョブが実行されても、証明書が更新されない。
解決策:
- cronジョブのログを確認します。
- 以下のコマンドで手動更新を実行します。
sudo certbot renew
更新が成功する場合は、cronジョブの設定に問題がある可能性があります。再度crontabファイルを確認してください。
6. HTTPSにアクセス…
症状:ブラウザでHTTPSにアクセスすると、接続エラーが発生する。
解決策:
- NginxがHTTPS(443番ポート)をリッスンしていることを確認します。
- 以下のコマンドでポートのリッスン状態を確認します。
sudo netstat -tulnp | grep 443
ポート443がリッスンされていない場合は、Nginxの設定ファイルを確認して再起動します。
Let’s EncryptでNginxにSSL証明書を設定する完全ガイド:まとめと次のステップ
本記事では、Let’s Encryptを使用してNginxに無料のSSL証明書を設定する手順を、具体的なコマンドと共に解説しました。以下に、重要なポイントをまとめます。
設定の流れ
- 準備:ドメインとサーバーの環境を整えます。
- Certbotのインストール:公式クライアントツールをインストールします。
- SSL証明書の発行:Certbotを使用して、Let’s Encryptから証明書を発行します。
- Nginxの設定更新:HTTPSリダイレクトとSSL設定を反映します。
- 自動更新の設定:cronジョブを使用して、証明書を自動更新します。
- トラブルシューティング:よくあるエラーとその解決策を紹介します。
セキュリティとパフォーマン…
SSL証明書を設定することで、以下のメリットが得られます。
- SEO評価の向上:GoogleはHTTPSサイトを優先的に検索結果に表示します。
- ユーザーの信頼性向上:ブラウザのアドレスバーに鍵マークが表示され、安心感が高まります。
- データの暗号化:ユーザーとサーバー間の通信が暗号化され、第三者による傍受を防ぎます。
- 法令遵守:個人情報を扱うサイトでは、HTTPS化が義務付けられています(例: GDPR)。
次のステップ
SSL証明書の設定が完了したら、以下のステップでさらにセキュリティを強化しましょう。
1. HTTP Strict Transport Security (HSTS)の設定
HSTSを設定することで、ブラウザに対して常にHTTPSでアクセスするよう強制できます。以下の設定をNginxに追加します。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
この設定を追加したら、Nginxを再起動します。
sudo systemctl restart nginx
注意:HSTSを設定すると、HTTPへのリダイレクトが機能しなくなります。設定前に必ずテストしてください。
2. SSL Labsのテスト実施
SSL Labsを使用して、SSL/TLSの設定を包括的にテストします。以下の項目が評価されます。
- プロトコルと暗号スイートのサポート
- 証明書の有効性
- セキュリティヘッダーの設定
- レート制限と脆弱性の有無
テスト結果に基づいて、必要な設定を見直しましょう。
3. バックアップの実施
SSL証明書とNginxの設定ファイルをバックアップしておきましょう。以下のコマンドでバックアップを作成します。
# SSL証明書のバックアップ
sudo cp -r /etc/letsencrypt /etc/letsencrypt-backup-$(date +%Y%m%d)
Nginxの設定ファイルのバックアップ
sudo cp -r /etc/nginx /etc/nginx-backup-$(date +%Y%m%d)
4. モニタリングの導入
SSL証明書の有効期限が近づくと、自動的に通知されるサービスを導入しましょう。例えば、以下のサービスがあります。
これらのサービスを使用すれば、証明書の有効期限が切れる前に通知を受け取ることができます。
参考リソース
Let’s EncryptとCertbotに関する公式ドキュメントは以下の通りです。
本記事が、あなたのウェブサイトのセキュリティ強化に役立つことを願っています。Let’s Encryptを活用して、安全で信頼性の高いウェブサイトを運営しましょう。
FAQ:Let’s Enc…
Q1. Let’s Enc…
A1. はい、Let’s EncryptのSSL証明書は完全に無料です。発行費用や更新費用は一切かかりません。これは、非営利団体であるISRG(Internet Security Research Group)によって運営されているためです。出典: Let’s Encrypt公式サイト
Q2. SSL証明書の有効…
A2. Let’s EncryptのSSL証明書の有効期限は90日間です。そのため、自動更新の設定が必須となります。Certbotを使用すれば、30日ごとに自動更新が実行されるため、手動での更新は不要です。
Q3. 複数のドメイン(サ…
A3. はい、Certbotを使用すれば、複数のドメインやサブドメインに対してSSL証明書を発行できます。以下のコマンドで発行します。
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com
このコマンドでは、example.com、www.example.com、blog.example.comの3つのドメインに対してSSL証明書が発行されます。
Q4. SSL証明書の発行…
A4. SSL証明書の発行に失敗する主な原因は以下の通りです。
- DNS設定が正しくない(AレコードがIPアドレスに解決されていない)
- ポート80または443が開放されていない
- Nginxが正しく起動していない
- Let’s Encryptのレート制限に引っかかっている
これらの原因を確認し、修正した後に再度Certbotを実行してください。レート制限については、公式ドキュメントを参照してください。
Q5. 自動更新が機能しな…
A5. 自動更新が機能しない場合は、以下の手順で確認します。
- cronジョブのログを確認します。
- 以下のコマンドで手動更新を実行します。
sudo certbot renew --force-renewal
更新が成功する場合は、cronジョブの設定に問題がある可能性があります。再度crontabファイルを確認してください。
Q6. SSL証明書のバッ…
A6. SSL証明書のバックアップは必須ではありませんが、推奨されます。特に、サーバーの再構築や移行を行う際には、バックアップがあれば安心です。以下のコマンドでバックアップを作成します。
sudo cp -r /etc/letsencrypt /etc/letsencrypt-backup-$(date +%Y%m%d)
Q7. Let’s Enc…
A7. はい、Let’s EncryptのSSL証明書は個人サイトだけでなく、企業サイトでも使用できます。ただし、企業サイトの場合は、ドメインの所有権を証明するための追加の手続きが必要な場合があります。詳細は、Let’s Encrypt FAQを参照してください。
Q8. SSL証明書の暗号…
A8. SSL証明書の暗号化強度を強化するには、Nginxの設定ファイルで以下の暗号スイートを使用します。
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA25 【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。ABOUT ME




