CPanel を搭載した一部の共有ホスティングパッケージでは、 AutoSSL が提供されていないか、高価格プランでのみ利用可能です。そのため、cPanel インターフェース経由で無料の Let's Encrypt 証明書を発行できず、すべてのドメインが自己署名証明書のままになってしまいます。ブラウザにはページが「安全ではありません」と表示されます。解決策は、 acme.shを使用して証明書を自分で取得し、cPanel UAPI 経由でインストールすることです。これにより、AutoSSL を使用せずに自動的に更新されます。
HTTPSは長らく必須となっています。だからこそ、利用しているホスティングパッケージに無料の証明書を取得する便利な方法が用意されていない場合、なおさらイライラさせられるものです。これは、例えば安価なエントリーレベルのパッケージや、プラン変更後に証明書が突然含まれなくなった場合など、想像以上に頻繁に起こります。しかし、シェルに数行のコードを追加するだけで、この問題をスマートかつ永続的に解決できます。その手順を以下に詳しく説明します。
1. SSH経由でログインする
ssh -p <port> <user>@example.com
2. acme.shをインストールする
curl https://get.acme.sh | sh -s email=me@example.com
source ~/.bashrc
3. Let's Encryptを認証局として設定する
acme.sh --set-default-ca --server letsencrypt
4. 証明書の発行
acme.sh --issue -d example.com -d www.example.com -w ~/public_html
5. cPanelにインストールする
acme.sh --deploy -d example.com --deploy-hook cpanel_uapi
6. 確認
uapi SSL installed_hosts
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -issuer -dates
このフックは、UAPI を介して適切な仮想ホストに証明書を書き込みます。デプロイ設定は保存され、今後は cron が有効期限前にすべてを自動的に更新およびインストールします。発行者は「Let's Encrypt」で、有効期限は約 90 日後です。古い自己署名証明書がまだ表示される場合は、ブラウザを強制的に再読み込みすると通常は解決します。以前の証明書が一時的にキャッシュされている可能性があります。
ホスティングプロバイダーによっては、独自のcPanelフックを提供しているところもあります。 install_ssl そして次のような返事をする adminbin Cpanel/hooks2/...: exit 255. acme.sh は引き続き「正常にデプロイされました」と報告しますが、これは正しいです。この場合、フックの失敗は実際のインストールではなく、後続のステップ(ホスティングプロバイダによる内部通知や同期ジョブなど)が原因です。
ウムラウトを含むドメインの場合、acme.sh は証明書を内部的に Punycode 形式で保存します (xn--…)、一方フックの自動マッチングは Unicode 形式を比較します。結果: 「0 件中 0 件のサイトにデプロイ済み」 – 何もインストールされません。厄介なのは、acme.sh もここで「成功」を報告するため、エラーが見落とされやすいことです。解決策: Punycode ドメインを直接操作し、自動マッチングを無効にします。:
python3 -c "import sys;print(sys.argv[1].encode('idna').decode())" hallöle.de
acme.sh --issue -d xn--hallle-zxa.de -d www.xn--hallle-zxa.de -w ~/public_html
export DEPLOY_CPANEL_AUTO_ENABLED='false'
acme.sh --deploy -d xn--hallle-zxa.de --deploy-hook cpanel_uapi
SSHアクセスではAutoSSLは不要です。acme.shが証明書を発行し、 cpanel_uapi-Hookオプションでインストールが完了し、付属のcronジョブによって自動的にアップデートされます。一度設定すれば、無料のHTTPSサービスは自動的に継続的に動作します。初期設定を行えば、今後の手動更新作業はすべて不要になり、同じアカウント内の他のドメインにも単一のコマンドで同様のソリューションを適用できます。