今回の環境情報
常時起動することもあるため、 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 が発行している証明書などは安価であるため、何を重視するかによって決めると良いのかな、と思います。
-
コマンドをコピペして実行する時に apt の処理が走らないよう、条件分岐を入れ、ワンライナーにしていますが、手入力なら
apt install python3
だけで良い。 ↩︎ -
https://github.com/zerossl/zerossl-bot/blob/master/zerossl-bot.sh の 8-9 行目の内容を見る限り、入力された JSON をパースしている ↩︎