Let’s Encryptで無料SSL証明書を取得する完全ガイド

自分で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

対話形式で質問に答えていくだけ。

質問内容

  1. メールアドレスの入力(更新通知用)
  2. 利用規約への同意
  3. 証明書を取得するドメインの選択
  4. 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サーバーを使って認証します。

証明書が更新されない

更新に失敗する場合のチェックポイントです。

確認項目

  1. ドメインが正しく設定されているか
  2. ポート80と443が開いているか
  3. ファイアウォールでブロックされていないか
  4. 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での設定

多くのレンタルサーバーが採用している管理画面です。

手順

  1. cPanelにログイン
  2. 「SSL/TLS」または「Let’s Encrypt」のアイコンをクリック
  3. ドメインを選択
  4. 「証明書のインストール」をクリック

数クリックで完了します。

プリインストールされている場合

最近のレンタルサーバーでは、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サイトを構築してくださいね!

コメント

タイトルとURLをコピーしました