はじめに
目的
本ドキュメントは、Let’s Encryptを利用して無料のSSL証明書を取得し、サーバーに導入してHTTPS化するまでの手順をわかりやすく解説します。特にApache環境での設定例を中心に説明します。
対象読者
- 自分でWebサイトを運用している方
- サーバーへの基本操作(SSHやコマンド実行)ができる方
- 初めてSSLを設定する方にも配慮して丁寧に説明します
本書で扱う内容
- Let’s Encryptの概要と仕組みの簡単な説明
- 証明書の取得手順(手動と自動更新)
- DNS認証を使ったワイルドカード証明書の取得方法
- 取得後の証明書ファイルの確認方法
- ApacheでのHTTPS化設定例
前提条件
- 独自ドメインを持っていること
- サーバーに管理者権限(rootまたはsudo)があること
- DNSの編集ができる環境であること(ワイルドカード発行時に必要)
注意事項
- 本手順は一般的な例を示します。環境やセキュリティポリシーによっては調整が必要です。
- 作業前に重要なファイルのバックアップを取ってください。
Let’s Encryptとは
概要
Let’s Encryptは、無料でSSL/TLS証明書を発行する認証局です。費用をかけずにウェブサイトをHTTPS化でき、発行元は証明書内に「Let’s Encrypt」と表示されます。初心者から運用担当者まで広く使われています。
主な特徴
- 無料で利用できます。
- 自動化に対応しており、証明書の取得・更新をツール(例: Certbot)で自動化できます。
- 証明書の有効期限は90日で、短期間に定期更新する仕組みです。
- ワイルドカード証明書(*.example.com)はDNS認証で発行可能です。
利用のメリット
- コストがかからず導入障壁が低いです。
- 自動更新を設定すれば手間が減り、安全性を保てます。
- 主要ブラウザで信頼されるため、表示上の警告が出にくいです。
注意点
- EV(組織実在性)証明書は発行しません。企業の厳格な証明が必要な場合は別途有償証明書が必要です。
- 発行数の制限(レートリミット)があります。短期間に大量のリクエストを送ると弾かれます。
- 自動化設定がないと、90日ごとの更新忘れで期限切れになる恐れがあります。
上記を理解すると、Let’s Encryptは手軽で安全なHTTPS導入の良い選択肢です。
SSL証明書取得の前準備
概要
SSL証明書を取得する前に、必要なソフトウェアとサーバーの基本設定を整えます。ここでは具体的な名前と簡単な役割、導入の流れを分かりやすく説明します。
必要なもの(概要)
- ドメイン名:証明書はドメイン単位で発行されます。DNSがサーバーを指していることを確認してください。
- Webサーバー(例:Apache):Webサイトを配信するソフトです。
- mod_ssl:ApacheでSSLを扱うためのモジュールです。
- Certbot:Let’s Encryptから証明書を取得・更新するためのツールです。
インストール例(代表的なコマンド)
- Ubuntu/Debian系の例:
- sudo apt update
- sudo apt install apache2 certbot python3-certbot-apache
- CentOS/RHEL系の例:
- sudo dnf install httpd mod_ssl
- sudo dnf install certbot python3-certbot-apache
(環境によりパッケージ名が異なる場合があります。)
Apacheの自動起動と起動
インストール後は自動起動を有効にし、サービスを起動します。例:
– sudo systemctl enable –now apache2 (Debian系)
– sudo systemctl enable –now httpd (RHEL系)
確認と注意点
- サーバーの80番ポートが外部から接続できることを確認してください(ファイアウォール設定)。
- サーバー上でroot権限またはsudo権限が必要です。
- ドメインのDNS反映には時間がかかる場合があります。取得前にAレコードが正しいか確認してください。
以上が、SSL証明書を取る前に整えておく基本の準備です。
SSL証明書の取得方法
概要
標準的にはWebroot認証を使い、Certbotでウェブルートとドメインを指定して証明書を取得します。複数ドメインの指定や連絡用メールの入力が必要です。ワイルドカード証明書はDNS認証でTXTレコードを追加して取得します。
Webroot認証での取得手順(代表例)
- ウェブルートを確認します(例: /var/www/html)。
- Certbotコマンドを実行します。
例:
certbot certonly –webroot -w /var/www/html -d example.com -d www.example.com –email you@example.com –agree-tos
- 成功すれば /etc/letsencrypt/live/example.com/ に鍵・証明書が作成されます。
ポイント: 更新時も同じウェブルート指定が必要です。
ワイルドカード証明書(DNS認証)
-
DNSのTXTレコードを追加します。Certbotの手順に従い表示される値をTXTに登録します。
例(手動):
certbot certonly –manual -d “*.example.com” -d example.com –preferred-challenges dns –email you@example.com –agree-tos -
TXTが反映されたらEnterして検証を完了します。自動化する場合はDNSプロバイダ用プラグイン(例: –dns-cloudflare)を使いAPIキーで自動更新します。
自動更新と注意点
- 手動で取得したワイルドカードは自動更新できないことがあります。DNSプラグインでAPIを使えば自動更新できます。
- 取得後はCertbotのrenewコマンドで更新確認します(certbot renew)。
以上が基本的な取得方法です。必要に応じて使い分けてください。
SSL証明書ファイルの確認
概要
証明書を取得したら、設定で使うファイルパスを控えます。代表的なファイルはprivkey.pem、chain.pem、fullchain.pemです。
重要なファイルと用途
- privkey.pem:秘密鍵。絶対に公開しないでください。サーバーがTLS通信の秘密情報として使います。
- chain.pem:中間証明書の束。ブラウザの信頼チェーンを補完します。
- fullchain.pem:サーバー証明書+中間証明書を連結したファイル。多くのサーバーで推奨されます。
ファイルの場所と確認方法
一般的な場所:/etc/letsencrypt/live/your-domain/
確認コマンド例:
ls -l /etc/letsencrypt/live/example.com/
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates
パーミッションと所有者
秘密鍵(privkey.pem)は読み取りを制限します。例:chmod 600、所有者root:rootまたはwebサーバー専用ユーザーにします。
サーバー設定での使い方(例)
- nginx:ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
- Apache:SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
よくある問題と対処
- ファイルが見つからない:/etc/letsencrypt/live/配下のドメイン名を確認し、シンボリックリンク切れならcertbot renewや再発行を試します。
- パーミッションエラー:privkey.pemの権限を見直し、必要に応じて所有者を変更します。
以上を控えておけば、HTTPS化の設定時に迷わず指定できます。
サーバーのHTTPS化設定
以下はApacheでHTTPS化する手順です。具体的なファイルやコマンド例も示します。
1. ssl.conf(または仮想ホスト)を編集
例: /etc/httpd/conf.d/ssl.conf または /etc/apache2/sites-available/default-ssl.conf に以下を設定します。
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName example.com
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
- DocumentRoot: 公開するファイルの場所です(例: /var/www/html)。
- ServerName: サイトのドメイン名(例: example.com)。
- SSLCertificateFile/SSLCertificateKeyFile: Let’s Encryptが発行した証明書と秘密鍵のパスです。
2. 設定の検証
設定に誤りがないか確認します。
sudo apachectl configtest
エラーが出なければ次へ進みます。
3. Apacheを再起動して反映
sudo systemctl restart httpd # CentOS系
sudo systemctl restart apache2 # Debian系
4. ブラウザで確認
ブラウザでサイトを開き、鍵アイコンをクリックして証明書の発行者が「Let’s Encrypt」になっていれば正常です。エラーが出る場合はログ(/var/log/httpd/ または /var/log/apache2/)を確認してください。












