最近のホスティングサービスはコントロールパネルから簡単に使える無料 SSL を提供しているところが多いですが、Namecheap にはそれがありません。
Namecheap はホスティングサービス契約時に1年間だけ無料で PositiveSSL が利用できますが、2年目以降は有料で更新しなくてはいけません。
せっかく安いから使っているのに、SSL に追加料金を払いたくはないので、Let’s Encrypt が発行する無料 SSL に切り替えることにしました。
Let’s Encrypt 用のクライアントは多数あるのですが、今回は root 権限なしの bash で使える acme.sh をインストールしてみます。公式のインストール手順はこちら。
コンテンツ
SSH でサーバに接続
Namecheap の cPanel にログインして “Manage Shell” をクリック。

“Enable SSH Access” のトグルをクリックして有効化。
“Access Details” には SSH 接続に必要な情報が書かれているのでメモしておく。

macOS や Linux を使っている場合はターミナルで以下のコマンドを入力して接続。Windows の場合は別途 Putty 等をインストールして接続。
ssh -p [SSH Port] [Username]@[Server IP]
# 例
ssh -p 21000 john@192.168.1.1
acme.sh をインストール
SSH でログイン後、作業用のディレクトリを作成して移動。
mkdir -p ~/tmp/acme-sh
cd ~/tmp/acme-sh/
acme.sh をインストール。
curl https://get.acme.sh | sh
.bashrc を読み込ませるため、一度 SSH 接続を切断して再接続。
証明書の更新通知をメールで受け取るためにメールアドレスを登録。
acme.sh --register-account --accountemail email@example.com
自動的に証明書の更新が行われるように crontab が設定されているか確認。
crontab -l | grep acme.sh
# 以下の様な出力が出ればOK。最初の数字はランダム。
41 0 * * * "/home/[cPanel ユーザー名]/.acme.sh"/acme.sh --cron --home "/home/[cPanel ユーザー名]/.acme.sh" > /dev/null
テスト証明書を発行
テスト証明書を発行して acme.sh のテストをする。基本的にはウェブサーバのルートディレクトリは ~/public_html だが、サブドメインを使用している場合は異なる可能性があるのでその場合は適切なディレクトリに読み替える。
必要なら以下のコマンドでルートディレクトリを確認できる。
uapi DomainInfo single_domain_data domain=[ドメイン名] | grep documentroot
テスト証明書を発行する。
acme.sh --issue --webroot ~/public_html -d [ドメイン名] --staging
www. 付き等の複数のドメインがある場合は複数の -d オプションを使う。
acme.sh --issue --webroot ~/public_html -d example.com -d www.example.com --staging
“Cert success.” と表示されればテスト成功。
失敗した場合は –debug 2 オプションを追加して実行するとより詳細なログが表じされる。
正式版の証明書を発行
以下のコマンドで正式版の証明書を発行。
acme.sh --issue --webroot ~/public_html -d [ドメイン名] --force
有料の PositiveSSL をアンインストール
まだ Namecheap が発行した有料の SSL が有効の場合は無効にする。
Namecheap の cPanel にログインして、“Namecheap SSL” をクリック。

「Installed via “Namecheap SSL”」タブでインストールされた証明書をアンインストールする。


cPanel に発行した証明書をインストール
発行した証明書を cPalel にインストールして利用可能にする。以降は自動的に証明書の更新とインストールが行われる。
acme.sh --deploy --deploy-hook cpanel_uapi --domain [ドメイン名]
ブラウザで確認
ブラウザでウェブサイトを開いて証明書の発行元を確認する。
アドレスバー左の鍵アイコンをクリックして証明書を表示する。


発行元が “Let’s Encrypt” になっていればOK。
なっていない場合は、ブラウザの再起動やブラウザのシークレットモードでも確認してみる。
acme.sh のアップグレード
acme.sh が動作しなくなった場合等、acme.sh をアップグレードするには以下のコマンドを実行する。
acme.sh --upgrade
SSH の接続を無効化
全ての作業が終わったらセキュリティ向上のため、有効化した SSH の接続設定を無効に戻しておく。