自分でWebサイトを立ち上げたとき、ブラウザに「保護されていない通信」という警告が表示された経験、ありませんか?
SSL証明書がないと、訪問者に不安を与えてしまいます。それに、GoogleもHTTPSのサイトを優遇すると公言しています。
でも、SSL証明書って高いんでしょ?年間数万円もかかるし…
そんな悩みを解決してくれるのが「Let’s Encrypt」です。完全無料で、しかも自動更新までできる画期的なサービス。
この記事では、Let’s Encryptの使い方を、初心者の方にも分かりやすく解説していきます。
今日から、あなたのサイトも「https://」で始まる安全なサイトになりますよ。
Let’s Encryptとは
無料のSSL証明書発行サービス
Let’s Encrypt(レッツ エンクリプト)は、誰でも無料でSSL/TLS証明書を取得できるサービスです。
特徴
- 完全無料(期限なし、永続的に無料)
- 自動更新が可能
- ドメイン認証型の証明書
- 90日間有効(自動更新で実質無期限)
- 主要ブラウザで信頼されている
2016年に正式サービスが開始されて以来、世界中で広く使われています。
なぜ無料なの?
「無料って怪しくない?」と思う方もいるかもしれません。
Let’s Encryptは、インターネットをより安全にするという目的で、非営利団体が運営しています。
運営組織
Internet Security Research Group(ISRG)という非営利団体が運営。Mozilla、Google、Cisco、Facebookなど、大手企業がスポンサーとして支援しています。
信頼性は十分にありますよ。
SSL/TLS証明書って何?
簡単に言えば、「このサイトは本物です」という証明書のことです。
役割
- 通信内容を暗号化する
- サイトの身元を証明する
- ブラウザに安全マークを表示させる
証明書がないと、パスワードやクレジットカード情報が盗み見される危険があるんです。
HTTPとHTTPSの違い
暗号化の有無
HTTP(通常の通信)
- データが平文で送信される
- 盗聴される危険がある
- パスワードも丸見え
HTTPS(暗号化された通信)
- データが暗号化される
- 盗聴されても解読できない
- 安全にパスワードを送信できる
カフェのWi-Fiなど、公共ネットワークでは特に重要です。
ブラウザの表示
HTTPSのサイトは、ブラウザで安全であることが示されます。
Chromeの場合
- HTTPSサイト:アドレスバーに鍵マーク
- HTTPサイト:「保護されていない通信」の警告
ユーザーに安心感を与えられますね。
SEOへの影響
GoogleはHTTPSサイトを検索順位で優遇すると発表しています。
同じ内容のサイトなら、HTTPSの方が上位に表示されやすいということ。SEO対策としても必須です。
Let’s Encryptの導入方法
準備するもの
導入には、以下の条件が必要です。
必要な環境
- 独自ドメイン(example.comなど)
- ドメインが正しく設定されている(DNSが通っている)
- サーバーへのroot権限またはsudo権限
- ポート80番と443番が開いている
共有レンタルサーバーでは、管理画面から簡単に設定できる場合が多いです。
Certbotのインストール
Let’s Encryptの証明書を取得・管理するツールが「Certbot」です。
Ubuntu/Debianの場合
sudo apt update
sudo apt install certbot
CentOS/RHELの場合
sudo yum install epel-release
sudo yum install certbot
Webサーバーごとのプラグイン
Apache使用の場合
sudo apt install python3-certbot-apache
Nginx使用の場合
sudo apt install python3-certbot-nginx
プラグインを使うと、自動的に設定ファイルも書き換えてくれます。
Apacheでの設定方法
自動設定(推奨)
最も簡単な方法です。Certbotが全て自動でやってくれます。
コマンド実行
sudo certbot --apache
対話形式で質問に答えていくだけ。
質問内容
- メールアドレスの入力(更新通知用)
- 利用規約への同意
- 証明書を取得するドメインの選択
- HTTPからHTTPSへのリダイレクト設定
数分で完了します。
手動設定
設定を自分で管理したい場合の方法です。
証明書の取得のみ
sudo certbot certonly --apache -d example.com -d www.example.com
-d
オプションで、証明書に含めるドメインを指定します。
Apacheの設定ファイル編集
/etc/apache2/sites-available/example.com-ssl.conf
を作成
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
設定の有効化
sudo a2ensite example.com-ssl.conf
sudo a2enmod ssl
sudo systemctl reload apache2
HTTPからのリダイレクト設定
HTTP(80番ポート)でアクセスされた場合、HTTPSに転送する設定です。
設定例
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
これで、すべてのアクセスがHTTPSになります。
Nginxでの設定方法
自動設定(推奨)
Nginxでも自動設定が使えます。
コマンド実行
sudo certbot --nginx
Apacheと同様、対話形式で進みます。設定ファイルも自動的に書き換えられます。
手動設定
証明書の取得
sudo certbot certonly --nginx -d example.com -d www.example.com
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;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
# HTTPからHTTPSへリダイレクト
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
設定の適用
sudo nginx -t # 設定ファイルのチェック
sudo systemctl reload nginx
証明書の自動更新
なぜ自動更新が必要?
Let’s Encryptの証明書は、有効期間が90日間です。
手動で更新するのは面倒ですよね。でも大丈夫。自動更新の仕組みがあります。
更新コマンドのテスト
まず、更新が正しく動作するか確認しましょう。
ドライラン(実際には更新しない)
sudo certbot renew --dry-run
エラーが出なければ、自動更新の準備は完了です。
cronによる自動実行
Linuxの定期実行機能「cron」を使います。
crontabの編集
sudo crontab -e
以下の行を追加
0 3 * * * certbot renew --quiet
毎日午前3時に更新チェックが実行されます。期限が近い証明書だけが自動的に更新されます。
systemdタイマーの利用
最近のシステムでは、systemdタイマーが自動的に設定されています。
状態の確認
sudo systemctl status certbot.timer
有効になっていれば、何もしなくても自動更新されます。
手動で更新を実行
sudo certbot renew
期限が30日を切った証明書が更新されます。
ワイルドカード証明書の取得
ワイルドカード証明書とは
*.example.com
のように、サブドメインすべてをカバーする証明書です。
メリット
- 複数のサブドメインを1つの証明書で管理
- サブドメインを追加するたびに証明書を取得する必要がない
注意点
- DNS認証が必要(HTTP認証は使えない)
- 手動での設定作業が必要
取得方法
DNSプラグインの使用
sudo certbot certonly --manual \
--preferred-challenges dns \
-d example.com \
-d *.example.com
実行すると、DNSレコードに特定の値を追加するよう指示されます。
TXTレコードの追加
ドメインの管理画面で、以下のようなTXTレコードを追加します。
_acme-challenge.example.com TXT "指定された値"
DNSの反映を待ってから、Enterキーを押すと証明書が発行されます。
自動更新の課題
ワイルドカード証明書の更新には、毎回DNSレコードの変更が必要です。
CloudflareやRoute 53など、API対応のDNSプロバイダーを使えば、完全自動化も可能です。
トラブルシューティング
ポート80が使えない場合
すでに別のサービスがポート80を使っている場合の対処法です。
スタンドアロンモード
sudo certbot certonly --standalone -d example.com
一時的にポート80を使って認証します。Webサーバーを停止してから実行してください。
Webroot認証
sudo certbot certonly --webroot \
-w /var/www/html \
-d example.com
既存のWebサーバーを使って認証します。
証明書が更新されない
更新に失敗する場合のチェックポイントです。
確認項目
- ドメインが正しく設定されているか
- ポート80と443が開いているか
- ファイアウォールでブロックされていないか
- Webサーバーが正常に動作しているか
ログの確認
sudo cat /var/log/letsencrypt/letsencrypt.log
エラーの詳細が記録されています。
証明書の期限切れ通知が来る
自動更新が動いていない可能性があります。
cronの確認
sudo crontab -l
更新コマンドが登録されているか確認してください。
手動で更新
sudo certbot renew --force-renewal
強制的に更新を実行します。
複数の証明書が存在する
同じドメインで複数の証明書を取得してしまった場合。
証明書のリスト表示
sudo certbot certificates
不要な証明書の削除
sudo certbot delete --cert-name example.com
セキュリティのベストプラクティス
SSL/TLSの推奨設定
証明書を取得するだけでなく、暗号化設定も適切にしましょう。
Apacheの推奨設定
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder on
古い脆弱なプロトコルを無効化しています。
Nginxの推奨設定
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
HSTSの有効化
HSTS(HTTP Strict Transport Security)は、常にHTTPSで接続するようブラウザに指示する機能です。
Apacheの設定
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Nginxの設定
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
一度HTTPSで接続すると、その後はHTTPでアクセスしようとしても自動的にHTTPSになります。
証明書の透明性
Let’s Encryptは、発行した証明書を公開ログに記録します。
これにより、不正な証明書の発行を検知できる仕組みになっています。透明性の高いサービスなんですね。
レンタルサーバーでの利用
cPanelでの設定
多くのレンタルサーバーが採用している管理画面です。
手順
- cPanelにログイン
- 「SSL/TLS」または「Let’s Encrypt」のアイコンをクリック
- ドメインを選択
- 「証明書のインストール」をクリック
数クリックで完了します。
プリインストールされている場合
最近のレンタルサーバーでは、Let’s Encryptが標準搭載されていることが多いです。
主要サービス
- さくらのレンタルサーバー:標準対応
- エックスサーバー:標準対応(無料・無制限)
- ロリポップ:標準対応
- ConoHa WING:標準対応
管理画面から簡単に設定できるはずです。
制限事項に注意
共有レンタルサーバーでは、一部機能が制限されることがあります。
よくある制限
- ワイルドカード証明書が使えない
- 自動更新の頻度が制限されている
- 複数ドメインの上限がある
サービスの仕様を確認してください。
Let’s Encryptの制限と注意点
レート制限
短期間に大量の証明書を取得すると、一時的に制限がかかります。
主な制限
- 1週間あたり、1つのドメインで50個まで
- 1時間あたり、失敗したリクエストは5回まで
通常の使い方なら、まず問題になりません。
証明書の種類
Let’s Encryptが発行するのは、ドメイン認証(DV)証明書のみです。
発行できない証明書
- 組織認証(OV)証明書
- 拡張認証(EV)証明書(緑のアドレスバー)
企業サイトで会社名を表示させたい場合は、有料の証明書が必要です。
サポート体制
無料サービスのため、個別のサポートはありません。
コミュニティフォーラムで質問できますが、基本的には自己責任での利用となります。
まとめ:今すぐHTTPSを導入しよう
Let’s Encryptについて、導入方法から運用まで詳しく解説してきました。
この記事のポイント
- Let’s Encryptは完全無料のSSL証明書サービス
- Certbotで簡単に証明書を取得できる
- ApacheやNginxで自動設定が可能
- 自動更新により手間なく運用できる
- レンタルサーバーでも標準搭載が増えている
HTTPSは、もはやWebサイトの必須要件です。
検索順位にも影響しますし、ユーザーからの信頼も得られます。Let’s Encryptなら、コストゼロで導入できるんです。
今日からできること
- [ ] Certbotをインストール
- [ ] 証明書を取得
- [ ] HTTPSの動作確認
- [ ] 自動更新の設定
- [ ] HTTPからのリダイレクト設定
まだHTTPのままのサイトがあるなら、今すぐ対応しましょう。
この記事を参考に、安全で信頼されるWebサイトを構築してくださいね!
コメント