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と443Let’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証明書を取得する前に、以下の項目を確認しましょう。

  1. ドメインの所有権確認

    Let’s Encryptはドメインの所有者のみに証明書を発行します。ドメインの所有権を証明する方法は主に2つあります。

    • HTTP-01チャレンジ: Webサーバー上に特定のファイルを配置して所有権を証明
    • DNS-01チャレンジ: DNSレコードに特定のTXTレコードを追加して所有権を証明

    通常はHTTP-01チャレンジが使用されますが、サブドメインが多い場合やWebサーバーを使用しない場合はDNS-01チャレンジが適しています。

  2. ポート80と443の開放確認

    ファイアウォールやセキュリティグループでポート80と443が開放されていることを確認します。

    以下は、ufw(Ubuntu)での設定例です。

    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
  3. DNS設定の確認

    ドメインのDNSレコードが正しく設定されていることを確認します。以下のコマンドで確認できます。

    dig A example.com +short
    dig AAAA example.com +short

    IPv4とIPv6の両方に対応している場合は、両方のレコードが存在している必要があります。

  4. Webサーバーの動作確認

    Webサーバーが正常に動作していることを確認します。以下は、Nginxの場合の確認方法です。

    sudo systemctl status nginx
    curl -I http://example.com

    HTTPリクエストが正常に返ってくることを確認してください。

これらの要件を満たしていれば、Let’s EncryptでSSL証明書を取得する準備が整っています。


Certbotのインストール方法

Certbotをインストールするには、使用しているOSとWebサーバーに応じた方法があります。以下に主要なOSでのインストール手順を解説します。

Ubuntu/Debian…

Ubuntu 20.04/22.04やDebian 10/11では、Certbotを公式リポジトリからインストールできます。

  1. Certbotのインストール
    sudo apt update
    sudo apt install certbot python3-certbot-nginx

    python3-certbot-nginxはNginx用のCertbotプラグインです。Apacheを使用している場合はpython3-certbot-apacheをインストールします。

  2. Certbotのバージョン確認
    certbot --version

    最新版をインストールしたことを確認します。

CentOS/Rocky …

CentOS 7/8、Rocky Linux 8/9、AlmaLinux 8/9では、EPELリポジトリを有効化してCertbotをインストールします。

  1. EPELリポジトリの有効化
    sudo dnf install epel-release

    CentOS 7の場合は以下のコマンドを実行します。

    sudo yum install epel-release
  2. Certbotのインストール
    sudo dnf install certbot python3-certbot-nginx

    Apacheを使用している場合はpython3-certbot-apacheをインストールします。

  3. Certbotのバージョン確認
    certbot --version

その他のOS

上記以外のOSを使用している場合は、Certbot公式サイトのインストールガイドを参照してください。CertbotはPythonで書かれているため、Python 3.6以上がインストールされている環境であれば、ソースからインストールすることも可能です。

Certbotプラグインの種類

Certbotには、Webサーバーごとに異なるプラグインが用意されています。主なプラグインは以下の通りです。

プラグイン名対応Webサーバー説明
certbot-nginxNginxNginxの設定ファイルを自動的に書き換えてSSLを有効化
certbot-apacheApacheApacheの設定ファイルを自動的に書き換えてSSLを有効化
certbot-dns-cloudflareCloudflareDNS-01チャレンジでCloudflareのDNSレコードを自動更新
certbot-dns-route53Amazon Route 53DNS-01チャレンジでRoute 53のDNSレコードを自動更新
certbot-dns-googleGoogle Cloud DNSDNS-01チャレンジでGoogle Cloud DNSのレコードを自動更新

これらのプラグインを使用することで、Webサーバーの設定を自動的に書き換えることができ、手動での設定が不要になります。

Certbotのアップデート

Certbotは定期的にアップデートされています。最新版を使用することで、新機能やセキュリティパッチを適用できます。

  1. Ubuntu/Debian
    sudo apt update
    sudo apt upgrade certbot
  2. CentOS/Rocky Linux/AlmaLinux
    sudo dnf update certbot

アップデート後は、以下のコマンドでバージョンを確認します。

certbot --version

Certbotを正常にインストールできたら、次はSSL証明書の取得に進みましょう。


SSL証明書の取得手順

Certbotを使用してSSL証明書を取得する手順は、Webサーバーの種類によって異なります。以下に、NginxとApacheそれぞれの手順を解説します。

Nginxを使用している場合

Nginxを使用している場合は、certbot-nginxプラグインを使用して、自動的にNginxの設定を書き換えることができます。

  1. Certbotを実行して証明書を取得
    sudo certbot --nginx -d example.com -d www.example.com

    上記のコマンドでは、example.comwww.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.
  2. 証明書の保存場所

    取得した証明書は、以下のディレクトリに保存されます。

    • /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/ディレクトリに保存されています。

  3. 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の設定を書き換えることができます。

  1. Certbotを実行して証明書を取得
    sudo certbot --apache -d example.com -d www.example.com

    上記のコマンドでは、example.comwww.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.
  2. 証明書の保存場所

    取得した証明書は、Nginxと同様に/etc/letsencrypt/ディレクトリに保存されます。

  3. 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を実行します。

  1. DNSプロバイダーの選択

    DNS-01チャレンジを自動化するには、DNSプロバイダーがCertbotに対応している必要があります。主な対応プロバイダーは以下の通りです。

    • Cloudflare
    • Amazon Route 53
    • Google Cloud DNS
    • DigitalOcean
    • Azure DNS

    対応プロバイダーの一覧は、Certbot公式ドキュメントで確認できます。

  2. DNSプラグインのインストール

    使用するDNSプロバイダーに応じたプラグインをインストールします。例えば、Cloudflareを使用する場合は以下のコマンドを実行します。

    sudo apt install certbot-dns-cloudflare
  3. APIキーの設定

    DNSプロバイダーのAPIキーを取得し、Certbotに設定します。Cloudflareの場合は、以下の手順で設定します。

    1. Cloudflareのダッシュボードにログインし、My Profile > API Tokensに移動します。
    2. Create Tokenをクリックし、以下の権限を持つトークンを作成します。
      • Zone:Zone:Read
      • Zone:DNS:Edit
    3. 作成したトークンを/etc/letsencrypt/cloudflare.iniに保存します。
    4. dns_cloudflare_api_key = "your-api-key-here"
    5. ファイルのパーミッションを600に設定します。
    6. sudo chmod 600 /etc/letsencrypt/cloudflare.ini
  4. 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を有効化するには、以下の手順で設定ファイルを編集します。

  1. 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;
        }
    }
  2. HTTPからHTTPSへのリダイレクト

    HTTP(ポート80)からHTTPS(ポート443)へのリダイレクトを設定します。

    server {
        listen 80;
        server_name example.com www.example.com;
        return 301 https://$host$request_uri;
    }
  3. 設定ファイルのテストと再読み込み

    設定ファイルに構文エラーがないか確認します。

    sudo nginx -t

    エラーがなければ、Nginxを再読み込みします。

    sudo systemctl reload nginx

Apacheの設定

ApacheでHTTPSを有効化するには、以下の手順で設定ファイルを編集します。

  1. SSLモジュールの有効化

    ApacheでSSLを使用するには、sslモジュールを有効化する必要があります。

    sudo a2enmod ssl
    sudo systemctl restart apache2

    CentOS/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
  2. 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>
  3. HTTPからHTTPSへのリダイレクト

    HTTP(ポート80)からHTTPS(ポート443)へのリダイレクトを設定します。

    <VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        Redirect permanent / https://example.com/
    </VirtualHost>
  4. 設定ファイルのテストと再読み込み

    設定ファイルに構文エラーがないか確認します。

    sudo apache2ctl configtest

    CentOS/Rocky Linux/AlmaLinuxの場合は以下のコマンドを実行します。

    sudo httpd -t

    エラーがなければ、Apacheを再読み込みします。

    sudo systemctl reload apache2

    CentOS/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
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営