クラウドサーバ上に Ubuntu をインストールし、サーバのコンパネに CyberPanel を使用して Web サーバを運用する際、プライマリドメインとそのサブドメイン以外で Let’s Encrypt が有効にならない事態が発生しているので、対処法を ChatGPT に質問した際の回答をメモ。
※チャットのやり取りをそのままコピペしたものです。ChatGPT さんにそのやりとりをブログ用に体裁を整えたものを作ってもらったので、記事中のShellの部分とかを調整後公開予定。
webコントロールパネルの CyberPanel で、マルチドメインにSSLが適用できないのはなぜ?
ChatGPT:
CyberPanel でマルチドメインに SSL を適用できない理由はいくつか考えられます。以下の点を確認してください。
1. Let’s Encrypt の制限
1つの証明書に登録できるサブドメインの数には制限があります(通常は最大100個)。
一定回数以上の発行リクエストを行うと、レート制限により発行できなくなる可能性があります。
2. DNS 設定の問題
ドメインやサブドメインが正しく DNS に設定されているか確認してください。
A レコードや CNAME レコードが正しく設定されていない場合、CyberPanel は SSL を適用できません。
3. CyberPanel のバグ
CyberPanel のバージョンによっては、マルチドメインの SSL に関するバグが報告されています。
CyberPanel の最新バージョンにアップデートすることで解決する場合があります。
4. Apache / OpenLiteSpeed の設定ミス
OpenLiteSpeed では、バーチャルホスト設定が適切でないと SSL の適用がうまくいかないことがあります。
/usr/local/lsws/conf/httpd_config.conf やバーチャルホストの設定を確認し、証明書が正しく適用されているか確認してください。
5. 証明書の自動更新が失敗している
acme.sh スクリプトを使用して証明書を取得している場合、適切に動作しているか確認してください。
手動で SSL 証明書を更新するには、以下のコマンドを試すことができます:
1 |
certbot renew --force-renewal |
6. CyberPanel で手動で SSL を適用
マルチドメイン SSL の適用がうまくいかない場合、CyberPanel の「Manage SSL」メニューから手動で各ドメインの SSL を適用してみてください。
解決策
CyberPanel の管理画面から SSL をリセット(Websites → SSL → Issue SSL)
各ドメインの DNS を確認し、A レコードが正しく設定されているか確認
CyberPanel の最新バージョンにアップデート
Let’s Encrypt のレート制限を確認し、一定時間(1週間程度)待って再試行
手動で証明書を適用する(Certbot などを使う)
具体的なエラーメッセージがあれば、さらに詳しい調査が可能です。
あなた:
Let’s Encrypt を手動で設定する方法はある?(Cert と Private key を自分で入力)
ChatGPT:
はい、Let’s Encrypt の証明書とプライベートキーを手動で設定する方法を説明します。
手順 1: Let’s Encrypt の証明書を取得
まず、サーバーで以下の手順を実行して証明書を取得します。
(Certbot を使用する方法を説明します)
Certbot をインストール(未インストールの場合)
1 |
sudo apt update && sudo apt install certbot -y |
または(CentOS の場合)
1 |
sudo yum install certbot -y |
証明書を取得
1 |
sudo certbot certonly --manual --preferred-challenges dns -d example.com -d www.example.com |
example.com の部分は適用したいドメインに置き換えてください。
コマンドを実行すると、DNS に TXT レコードを追加するよう指示されます。
証明書ファイルの確認 証明書が発行されると、以下のパスに保存されます:
証明書(Cert): /etc/letsencrypt/live/example.com/fullchain.pem
秘密鍵(Private Key): /etc/letsencrypt/live/example.com/privkey.pem
手順 2: CyberPanel に適用
CyberPanel にログイン
左メニューから「ウェブサイト」→「リスト」→ 該当ドメインを選択
「SSL」タブを開き、「カスタム SSL」を選択
取得した証明書を入力
「Cert(証明書)」欄に fullchain.pem の内容をコピー&ペースト
「Private Key(秘密鍵)」欄に privkey.pem の内容をコピー&ペースト
「保存」ボタンをクリック
手順 3: CyberPanel を再起動
1 |
sudo systemctl restart lscpd |
または、Nginx や Apache を使用している場合は適宜再起動。
これで、CyberPanel で手動で SSL 証明書を適用できます。
不明点があれば、詳細を教えてください!
あなた:
それで Let’s Encrypt 証明書の自動更新も有効になる?
ChatGPT:
いいえ、手動で取得した Let’s Encrypt の証明書を CyberPanel に適用しただけでは、自動更新は有効になりません。Let’s Encrypt の証明書は 90日ごとに更新 する必要があるため、自動更新の設定も行う必要があります。
Let’s Encrypt の証明書を自動更新する方法(Certbot 使用)
① Certbot の自動更新を設定
Let’s Encrypt の証明書を自動更新するには、certbot renew コマンドをスケジュール(cron ジョブ)に登録します。
手動で更新テスト
以下のコマンドを実行して、証明書の更新ができるか確認してください:
1 |
sudo certbot renew --dry-run |
問題なく更新されることを確認したら、自動更新の設定を行います。
② 自動更新を cron ジョブに登録
crontab を開く
1 |
sudo crontab -e |
以下の行を追加
1 |
0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl restart lscpd" |
毎日 午前3時 に自動更新を試行します。
証明書が更新された場合のみ CyberPanel(LiteSpeed)を再起動 します。
Apache や Nginx を使用している場合
Apache の場合: “systemctl restart httpd”
Nginx の場合: “systemctl restart nginx”
③ CyberPanel に最新の証明書を適用する(自動更新後)
Let’s Encrypt が自動更新された後、CyberPanel に適用するためのスクリプトを cron に追加します。
1 |
0 3 * * * cp /etc/letsencrypt/live/example.com/fullchain.pem /usr/local/lsws/conf/cert.pem && cp /etc/letsencrypt/live/example.com/privkey.pem /usr/local/lsws/conf/key.pem && systemctl restart lscpd |
このスクリプトは、最新の証明書を CyberPanel にコピーし、LiteSpeed を再起動します。
④ 設定の確認
設定が正しく適用されているかを確認するには、以下のコマンドを実行:
1 |
sudo certbot certificates |
証明書の有効期限が正しく表示されているか確認してください。
まとめ
✔ Certbot の certbot renew を cron に登録すれば、自動更新が可能
✔ 更新後に CyberPanel(LiteSpeed)を再起動するように設定
✔ Apache や Nginx を使用している場合は、それぞれのサーバーを再起動
これで Let’s Encrypt の証明書が自動更新され、CyberPanel にも適用されます!
問題があれば、具体的なエラーメッセージなど教えてください。
あなた:
CyberPanel 上で更新できなかった Let’s Encrypt も、コンパネを使用しない Let’s Encrypt の自動更新設定をすれば問題なく使えるという理解で良い? また、この場合、CyberPanel 上で証明書の有効期限までの日数はちゃんとカウントされる?
ChatGPT:
回答
はい、その理解で ほぼ正しい ですが、CyberPanel 上の表示については注意点があります。
① Let’s Encrypt の自動更新は問題なく動作する
CyberPanel の機能を使わずに Certbot で直接証明書を管理 する方法なら、Let’s Encrypt の証明書を問題なく取得・更新できます。
つまり、CyberPanel の SSL 設定機能を使わずとも、証明書は正しく適用される ということです。
② CyberPanel 上の証明書の有効期限カウントについて
✅ CyberPanel は Let’s Encrypt の管理を自前でやっているため、外部で取得した証明書の更新状況を認識しない可能性が高いです。
CyberPanel の管理画面で「SSL の有効期限」などを確認すると、手動で設定した証明書の有効期限が更新されていないように見える ことがあります。
これは単に CyberPanel が Certbot の証明書情報を読み取れないため であり、実際には証明書自体は正しく更新されています。
③ CyberPanel に有効期限を正しく認識させる方法
CyberPanel の管理画面でも正しく有効期限を表示させるには、CyberPanel の SSL 証明書の管理ディレクトリに Certbot で取得した証明書をコピー すれば解決できます。
例えば、Let’s Encrypt の証明書が /etc/letsencrypt/live/example.com/ にある場合、CyberPanel の証明書管理フォルダ(/etc/cyberpanel/ssl/example.com/)にコピーします。
コピー&更新用のスクリプト(cron に登録)
1 2 3 4 5 6 7 8 |
#!/bin/bash DOMAIN="example.com" cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/cyberpanel/ssl/$DOMAIN/cert.pem cp /etc/letsencrypt/live/$DOMAIN/privkey.pem /etc/cyberpanel/ssl/$DOMAIN/key.pem chown lscpd:lscpd /etc/cyberpanel/ssl/$DOMAIN/* systemctl restart lscpd |
このスクリプトを certbot renew の後に実行すれば、CyberPanel の管理画面にも 正しい有効期限 が反映されるはずです。
結論
✅ CyberPanel を介さず Certbot で Let’s Encrypt を管理すれば、SSL は問題なく機能する
✅ ただし CyberPanel の SSL 有効期限表示は更新されない可能性がある
✅ Certbot の証明書を CyberPanel の SSL ディレクトリにコピーすれば、管理画面上でも有効期限が正しく表示される