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

Webサイトのセキュリティを強化するなら、Let’s Encryptで無料SSL証明書を取得・設定しましょう。この方法でHTTPS化すれば、SEO効果の向上だけでなく、ユーザーの信頼性も高まります。設定手順はたった5分で完了し、自動更新も可能です。
本記事では、Let’s Encryptの基本概念から、実際の設定手順、トラブルシューティングまで、具体的な手法を網羅的に解説します。サーバー環境別に分けて丁寧に説明するので、初心者でも安心して実践できます。
目次
Let’s Encryptとは何か
Let’s Encryptは、非営利団体のInternet Security Research Group (ISRG)が運営する、無料でSSL/TLS証明書を発行するサービスです。2016年のサービス開始以来、世界中のWebサイトで利用されており、現在では1億件以上の証明書が発行されています(出典: Let’s Encrypt公式統計)。
主な特徴は以下の通りです。
| 特徴 | 詳細 |
|---|---|
| 無料 | ドメイン認証(DV)証明書を無償で発行 |
| 自動化 | Certbotを使用して証明書の取得・更新を自動化可能 |
| 有効期間 | 90日間(自動更新で継続利用可能) |
| 対応プロトコル | TLS 1.2、TLS 1.3 |
| 発行スピード | 数分で証明書を発行可能 |
Let’s Encryptの最大のメリットは、コストをかけずにWebサイトをHTTPS化できる点です。GoogleはHTTPSを検索ランキングの要因の一つとしており(出典: Google公式ブログ)、SEO対策としても有効です。
一方で、注意点もあります。
- ドメイン認証(DV)証明書のみ発行可能(企業認証(OV)や拡張認証(EV)は発行不可)
- 証明書の有効期間が90日間と短い(ただし自動更新で対応可能)
- 一部の古いブラウザではサポートされていない場合がある
Let’s Encryptを利用するには、Certbotと呼ばれるクライアントソフトウェアを使用します。Certbotは、証明書の取得・更新・Webサーバーの設定を自動化するツールで、Linux、macOS、Windowsに対応しています。
事前準備と要件
Let’s EncryptでSSL証明書を取得する前に、以下の要件を満たしていることを確認してください。
必須要件
| 要件 | 詳細 |
|---|---|
| 独自ドメイン | Let’s Encryptは独自ドメインに対してのみ証明書を発行します。ローカルネットワークやIPアドレスのみのサイトには発行できません。 |
| Webサーバー | Apache、Nginx、HAProxy、CaddyなどのWebサーバーが動作している必要があります。 |
| ポート80と443 | Let’s Encryptの認証局(ACMEサーバー)と通信するために、ポート80(HTTP)と443(HTTPS)を開放しておく必要があります。 |
| DNS設定 | ドメインのDNSレコードが正しく設定されている必要があります。AレコードまたはAAAAレコードがドメインに紐づいていることを確認してください。 |
| root権限 | Certbotを実行するには、root権限またはsudo権限が必要です。 |
推奨環境
以下の環境であれば、Certbotを使用して簡単にSSL証明書を取得・設定できます。
- OS: Ubuntu 20.04/22.04、Debian 10/11、CentOS 7/8、Rocky Linux 8/9、AlmaLinux 8/9
- Webサーバー: Apache 2.4、Nginx 1.18+
- Certbotバージョン: 1.12.0以上(最新版を推奨)
サポートされているOSとWebサーバーの一覧は、Certbot公式サイトで確認できます。
事前確認手順
SSL証明書を取得する前に、以下の項目を確認しましょう。
- ドメインの所有権確認
Let’s Encryptはドメインの所有者のみに証明書を発行します。ドメインの所有権を証明する方法は主に2つあります。
- HTTP-01チャレンジ: Webサーバー上に特定のファイルを配置して所有権を証明
- DNS-01チャレンジ: DNSレコードに特定のTXTレコードを追加して所有権を証明
通常はHTTP-01チャレンジが使用されますが、サブドメインが多い場合やWebサーバーを使用しない場合はDNS-01チャレンジが適しています。
- ポート80と443の開放確認
ファイアウォールやセキュリティグループでポート80と443が開放されていることを確認します。
以下は、ufw(Ubuntu)での設定例です。
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable - DNS設定の確認
ドメインのDNSレコードが正しく設定されていることを確認します。以下のコマンドで確認できます。
dig A example.com +short dig AAAA example.com +shortIPv4とIPv6の両方に対応している場合は、両方のレコードが存在している必要があります。
- Webサーバーの動作確認
Webサーバーが正常に動作していることを確認します。以下は、Nginxの場合の確認方法です。
sudo systemctl status nginx curl -I http://example.comHTTPリクエストが正常に返ってくることを確認してください。
これらの要件を満たしていれば、Let’s EncryptでSSL証明書を取得する準備が整っています。
Certbotのインストール方法
Certbotをインストールするには、使用しているOSとWebサーバーに応じた方法があります。以下に主要なOSでのインストール手順を解説します。
Ubuntu/Debian…
Ubuntu 20.04/22.04やDebian 10/11では、Certbotを公式リポジトリからインストールできます。
- Certbotのインストール
sudo apt update sudo apt install certbot python3-certbot-nginxpython3-certbot-nginxはNginx用のCertbotプラグインです。Apacheを使用している場合はpython3-certbot-apacheをインストールします。 - Certbotのバージョン確認
certbot --version最新版をインストールしたことを確認します。
CentOS/Rocky …
CentOS 7/8、Rocky Linux 8/9、AlmaLinux 8/9では、EPELリポジトリを有効化してCertbotをインストールします。
- EPELリポジトリの有効化
sudo dnf install epel-releaseCentOS 7の場合は以下のコマンドを実行します。
sudo yum install epel-release - Certbotのインストール
sudo dnf install certbot python3-certbot-nginxApacheを使用している場合は
python3-certbot-apacheをインストールします。 - Certbotのバージョン確認
certbot --version
その他のOS
上記以外のOSを使用している場合は、Certbot公式サイトのインストールガイドを参照してください。CertbotはPythonで書かれているため、Python 3.6以上がインストールされている環境であれば、ソースからインストールすることも可能です。
Certbotプラグインの種類
Certbotには、Webサーバーごとに異なるプラグインが用意されています。主なプラグインは以下の通りです。
| プラグイン名 | 対応Webサーバー | 説明 |
|---|---|---|
| certbot-nginx | Nginx | Nginxの設定ファイルを自動的に書き換えてSSLを有効化 |
| certbot-apache | Apache | Apacheの設定ファイルを自動的に書き換えてSSLを有効化 |
| certbot-dns-cloudflare | Cloudflare | DNS-01チャレンジでCloudflareのDNSレコードを自動更新 |
| certbot-dns-route53 | Amazon Route 53 | DNS-01チャレンジでRoute 53のDNSレコードを自動更新 |
| certbot-dns-google | Google Cloud DNS | DNS-01チャレンジでGoogle Cloud DNSのレコードを自動更新 |
これらのプラグインを使用することで、Webサーバーの設定を自動的に書き換えることができ、手動での設定が不要になります。
Certbotのアップデート
Certbotは定期的にアップデートされています。最新版を使用することで、新機能やセキュリティパッチを適用できます。
- Ubuntu/Debian
sudo apt update sudo apt upgrade certbot - CentOS/Rocky Linux/AlmaLinux
sudo dnf update certbot
アップデート後は、以下のコマンドでバージョンを確認します。
certbot --versionCertbotを正常にインストールできたら、次はSSL証明書の取得に進みましょう。
SSL証明書の取得手順
Certbotを使用してSSL証明書を取得する手順は、Webサーバーの種類によって異なります。以下に、NginxとApacheそれぞれの手順を解説します。
Nginxを使用している場合
Nginxを使用している場合は、certbot-nginxプラグインを使用して、自動的にNginxの設定を書き換えることができます。
- Certbotを実行して証明書を取得
sudo certbot --nginx -d example.com -d www.example.com上記のコマンドでは、
example.comとwww.example.comのドメインに対してSSL証明書を取得します。ドメイン名は、実際のドメイン名に置き換えてください。Certbotは、HTTP-01チャレンジを使用してドメインの所有権を確認します。そのため、Webサーバーがポート80でリクエストを受け付けている必要があります。
証明書の取得が成功すると、以下のようなメッセージが表示されます。
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-01-01. 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" - You can find your files at: /etc/letsencrypt/archive/example.com/ - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. - 証明書の保存場所
取得した証明書は、以下のディレクトリに保存されます。
/etc/letsencrypt/live/example.com/fullchain.pem: 証明書チェーン(中間証明書を含む)/etc/letsencrypt/live/example.com/privkey.pem: 秘密鍵/etc/letsencrypt/live/example.com/cert.pem: 証明書/etc/letsencrypt/live/example.com/chain.pem: 中間証明書
これらのファイルは、シンボリックリンクで
/etc/letsencrypt/archive/ディレクトリに保存されています。 - Nginxの設定確認
Certbotは自動的にNginxの設定ファイルを書き換え、HTTPSを有効化します。設定ファイルは
/etc/nginx/sites-available/ディレクトリに保存されています。以下は、自動的に書き換えられたNginxの設定例です。
server { server_name example.com www.example.com; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # その他の設定... } server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }上記の設定では、HTTP(ポート80)からHTTPS(ポート443)へのリダイレクトが自動的に設定されています。
Apacheを使用している場合
Apacheを使用している場合は、certbot-apacheプラグインを使用して、自動的にApacheの設定を書き換えることができます。
- Certbotを実行して証明書を取得
sudo certbot --apache -d example.com -d www.example.com上記のコマンドでは、
example.comとwww.example.comのドメインに対してSSL証明書を取得します。ドメイン名は、実際のドメイン名に置き換えてください。Certbotは、HTTP-01チャレンジを使用してドメインの所有権を確認します。そのため、Webサーバーがポート80でリクエストを受け付けている必要があります。
証明書の取得が成功すると、以下のようなメッセージが表示されます。
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-01-01. 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" - You can find your files at: /etc/letsencrypt/archive/example.com/ - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. - 証明書の保存場所
取得した証明書は、Nginxと同様に
/etc/letsencrypt/ディレクトリに保存されます。 - Apacheの設定確認
Certbotは自動的にApacheの設定ファイルを書き換え、HTTPSを有効化します。設定ファイルは
/etc/apache2/sites-available/(Debian/Ubuntu)または/etc/httpd/conf.d/(CentOS/Rocky Linux)ディレクトリに保存されています。以下は、自動的に書き換えられたApacheの設定例です(Debian/Ubuntuの場合)。
<VirtualHost *:443> ServerName example.com ServerAlias www.example.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # その他の設定... </VirtualHost> <VirtualHost *:80> ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ </VirtualHost>上記の設定では、HTTP(ポート80)からHTTPS(ポート443)へのリダイレクトが自動的に設定されています。
DNS-01チャレンジを使…
HTTP-01チャレンジでは、Webサーバーを使用しない場合や、サブドメインが多い場合に対応できないことがあります。そのような場合は、DNS-01チャレンジを使用します。
DNS-01チャレンジを使用するには、以下の手順でCertbotを実行します。
- DNSプロバイダーの選択
DNS-01チャレンジを自動化するには、DNSプロバイダーがCertbotに対応している必要があります。主な対応プロバイダーは以下の通りです。
- Cloudflare
- Amazon Route 53
- Google Cloud DNS
- DigitalOcean
- Azure DNS
対応プロバイダーの一覧は、Certbot公式ドキュメントで確認できます。
- DNSプラグインのインストール
使用するDNSプロバイダーに応じたプラグインをインストールします。例えば、Cloudflareを使用する場合は以下のコマンドを実行します。
sudo apt install certbot-dns-cloudflare - APIキーの設定
DNSプロバイダーのAPIキーを取得し、Certbotに設定します。Cloudflareの場合は、以下の手順で設定します。
- Cloudflareのダッシュボードにログインし、My Profile > API Tokensに移動します。
- Create Tokenをクリックし、以下の権限を持つトークンを作成します。
- Zone:Zone:Read
- Zone:DNS:Edit
- 作成したトークンを
/etc/letsencrypt/cloudflare.iniに保存します。 - ファイルのパーミッションを600に設定します。
dns_cloudflare_api_key = "your-api-key-here"sudo chmod 600 /etc/letsencrypt/cloudflare.ini - Certbotを実行して証明書を取得
DNS-01チャレンジを使用して証明書を取得します。
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d example.com -d *.example.com上記のコマンドでは、
example.comと*.example.comのドメインに対してSSL証明書を取得します。
DNS-01チャレンジを使用する場合は、DNSプロバイダーのAPIキーを安全に管理することが重要です。APIキーが漏洩すると、悪意のある第三者によってDNSレコードが改ざんされる可能性があります。
Webサーバーの設定
SSL証明書を取得したら、Webサーバーの設定を調整してHTTPSを有効化します。ここでは、NginxとApacheの設定方法を解説します。
Nginxの設定
NginxでHTTPSを有効化するには、以下の手順で設定ファイルを編集します。
- SSL設定の追加
Nginxの設定ファイル(例:
/etc/nginx/sites-available/example.com)に以下の設定を追加します。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の設定 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_cache shared:SSL:10m; ssl_session_timeout 10m; # その他の設定... root /var/www/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } } - HTTPからHTTPSへのリダイレクト
HTTP(ポート80)からHTTPS(ポート443)へのリダイレクトを設定します。
server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } - 設定ファイルのテストと再読み込み
設定ファイルに構文エラーがないか確認します。
sudo nginx -tエラーがなければ、Nginxを再読み込みします。
sudo systemctl reload nginx
Apacheの設定
ApacheでHTTPSを有効化するには、以下の手順で設定ファイルを編集します。
- SSLモジュールの有効化
ApacheでSSLを使用するには、
sslモジュールを有効化する必要があります。sudo a2enmod ssl sudo systemctl restart apache2CentOS/Rocky Linux/AlmaLinuxの場合は以下のコマンドを実行します。
sudo sed -i 's/^#LoadModule ssl_module/#LoadModule ssl_module/' /etc/httpd/conf.modules.d/00-ssl.conf sudo systemctl restart httpd - SSL設定の追加
Apacheの設定ファイル(例:
/etc/apache2/sites-available/example.com-ssl.conf)に以下の設定を追加します。<VirtualHost *:443> ServerName example.com ServerAlias www.example.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # SSLの設定 SSLProtocol -all +TLSv1.2 +TLSv1.3 SSLCipherSuite 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 SSLHonorCipherOrder on SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000) # その他の設定... DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> - HTTPからHTTPSへのリダイレクト
HTTP(ポート80)からHTTPS(ポート443)へのリダイレクトを設定します。
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ </VirtualHost> - 設定ファイルのテストと再読み込み
設定ファイルに構文エラーがないか確認します。
sudo apache2ctl configtestCentOS/Rocky Linux/AlmaLinuxの場合は以下のコマンドを実行します。
sudo httpd -tエラーがなければ、Apacheを再読み込みします。
sudo systemctl reload apache2CentOS/Rocky Linux/AlmaLinuxの場合は以下のコマンドを実行します。
sudo systemctl reload httpd
SSLのベストプラクティス
Webサイトのセキュリティを強化するために、以下のSSL設定を適用することを推奨します。
| 設定項目 | 推奨値 | 説明 |
|---|---|---|
| SSLプロトコル | TLS 1.2、TLS 1.3 | 古いSSL/TLSプロトコル(SSLv3、TLS 1.0、TLS 1.1)は無効化します。 |
| 暗号スイート | ECDHE-ECDSA-AES128-GCM この記事を読んでいる方へのおすすめ: この記事で学んだスキルをさらに深めたい方へ インフラセキュリティを体系的に学ぶための技術書です。SSL/TLS・ファイアウォール・VPNを網羅しています。 Amazonアソシエイトプログラムを利用しています。 【編集・制作ポリシー】 本記事はRoute Bloom編集部が公式ドキュメント・技術仕様書の一次情報をもとに作成しています。ITインフラ・技術情報は急速に変化するため、実装前に最新の公式ドキュメントをご確認ください。情報の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。 【編集・制作ポリシー】 本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 【編集・制作ポリシー】 本記事はRoute Bloom編集部が各ベンダー・技術標準の公式ドキュメントをもとに作成しています。 インフラ・クラウド技術に関する最終判断は実際の環境・バージョンで検証のうえ実施してください。 情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 編集ポリシー:この記事は、Route Bloom の編集チームが最新情報を元に執筆・監修しています。情報の正確性を保つために定期的な見直しを行っています。 ABOUT ME |




