今回の環境情報

常時起動することもあるため、 NTTPC が提供する WebARENA Indigo を利用します。

  • Ubuntu 22.04
  • CPU 1vCPU
  • RAM 1GB
  • SSD 20GB
  • NW 100Mbps 上限
  • WordPress が HTTP 通信できる状態(nginx / php 8.1 / MySQL をインストール)
    • nginx / MySQL は公式レポジトリを利用し、最新版をインストール
    • php 系は Ubuntu のレポジトリからインストール(8.2 が出ているが)
    • 途中で certbot を snap コマンドを利用してインストール

普通にウェブサイトをホスティングし、個人ブログを始めてみる程度なら選択肢に入ると思います。
ネックになると思う SSD 20GB は思ったより容量があり、上記(WordPress をインストール)の状態で df コマンドを実行したところ、 5 GB 利用していました。

df --block-size=GB
Filesystem     1GB-blocks  Used Available Use% Mounted on
tmpfs                 1GB   1GB       1GB   1% /run
/dev/vda1            21GB   5GB      17GB  20% /
tmpfs                 1GB   0GB       1GB   0% /dev/shm
tmpfs                 1GB   0GB       1GB   0% /run/lock
/dev/vda15            1GB   1GB       1GB   6% /boot/efi
tmpfs                 1GB   1GB       1GB   1% /run/user/1000

ZeroSSL とは

ZeroSSL は無料で 90 日間の DV SSL 証明書を取得することのできるサービスです。類似のサービスに Let’s Encrypt が挙げられますが、使う分には概ね同じ感じです。

差分としては以下の通りです。

  • 会員登録が必要(Let’s Encrypt とは異なり、ウェブサイトからのユーザ登録が必要)
  • ダッシュボードがあり、証明書の停止や画面からの作成ができること
  • 個人での利用目的もしくは法人では内部的な利用に制限されていること(規約上はそのようになっているよう読めた)

そのため、法人でサービスを提供するときをはじめとする場面では他の証明書を利用するのが望ましいです。
反対に、趣味で個人ブログを運営したり、開発用サーバで利用するドメインの証明書を取得するなどのような用途には向いています。

ZeroSSL で証明書を取得してみる

ZeroSSL の会員登録などについては、入力項目もすくなかったため割愛します。

証明書の取得方法は ACME 方式を利用するため、 API キーの取得も必要ですが、ログイン後のダッシュボード → Developer で取得できました。

ここからが本題なのですが、 Certbot を使うと、デフォルトでは Let’s Encrypt に接続されます。しかし、 ZeroSSL を利用するので、クライアントが必要です。

今回は ZeroSSL Bot と呼ばれるクライアント(Certbot のラッパースクリプト)を利用しました。

インストールは ZeroSSL Bot の README.md に記載がありますが、 root 権限で以下のシェルを実行します。

bash <(curl -s https://zerossl.com/get-zerosslbot.sh)

上記のワンライナーを実行後、certbot によく似たコマンドを実行し、証明書の取得を行います。

sudo zerossl-bot --nginx -m {メールアドレス} -d {ホスト名} --zerossl-api-key {APIキー}

この時に以下のようなエラーが表示されると思います。

pyhton: command not found

コマンド内部で python コマンドが必要な処理があるようです。
そもそも、 Python 2.x 系のサポートが終わっていることもありますが、 Python 3 系を利用するにあたり、呼び出すためのコマンドが python3 に変更されています。

とりあえず、 Python 3.x 系の最新をインストールします。

which python3
if [[ "$?" -eq 0 ]]; then apt install python3; fi

上記のコマンドで実施している内容は以下の通りです。

  • 最初に which コマンドを実行しているのは Python がインストールされているか確認
    • which コマンドの実行結果が空(何も表示されずにコマンドが終了)なら入っていない
    • 何かしらの文字列(例: /usr/bin/python3)が返却される場合は入っている
  • 入っていない場合 Python3 をインストール(今回は入っていなかったのでインストール)1

Python 3 をインストールした後、 python にパスを通します。

ln -s /usr/bin/python3 /usr/bin/python

好みの方法があると思いますが、以下の観点からシステム全体に適応する方法にしています。

  • 定期実行すること
  • Python 2 系を使うことはない

再度、zerossl-bot コマンドを実行すれば、証明書が取得できるはずです。(スクリプト2をざっくり読んだ感じだと jq コマンドに置き換えることができそうな気がしますが、何かあるのでしょう・・・)

あとは取得した証明書を反映するだけです。
nginx などを指定しているのであれば、 Certbot 推奨の設定が行われているはずですし、 certonly のように証明書の取得だけを行なっている場合は、アプリケーションの設定を行いましょう。

まとめ

Let’s Encrypt 以外の選択肢があるのは、ある意味 Let’s Encrypt 一強だったところに選択肢が増えたのは、良いのではないかと思いました。

一方で、有料の証明書を利用したい場面では、 JPRS が発行している証明書などは安価であるため、何を重視するかによって決めると良いのかな、と思います。


  1. コマンドをコピペして実行する時に apt の処理が走らないよう、条件分岐を入れ、ワンライナーにしていますが、手入力なら apt install python3 だけで良い。 ↩︎

  2. https://github.com/zerossl/zerossl-bot/blob/master/zerossl-bot.sh の 8-9 行目の内容を見る限り、入力された JSON をパースしている ↩︎