macOSで、zerossl-botが使えるかどうかについての考察

[追記]
以下の記述(zerossl-botの異常動作)は、このissueにある通り、古いバージョンのスクリプトがダウンロードされる事によることが、記事の投稿後に分かった。
スクリプトを修正、またはスクリプト本体を直接ダウンロードすれば、スクリプトとしては動作する事を確認した。

[修正個所]

--- a/zerossl-bot.sh
+++ b/zerossl-bot.sh
@@ -5,9 +5,9 @@
 function parse_eab_credentials()
 {
     PYTHONIOENCODING=utf8
-    ZEROSSL_EAB_KID=$(echo $1 | python -c "import sys, json;
+    ZEROSSL_EAB_KID=$(echo $1 | python3 -c "import sys, json;
 print(json.load(sys.stdin)['eab_kid'])")
-    ZEROSSL_EAB_HMAC_KEY=$(echo $1 | python -c "import sys, json;
+    ZEROSSL_EAB_HMAC_KEY=$(echo $1 | python3 -c "import sys, json;
 print(json.load(sys.stdin)['eab_hmac_key'])")
     CERTBOT_ARGS+=(--eab-kid "$ZEROSSL_EAB_KID" --eab-hmac-key "$ZEROSSL_EAB_HMAC_KEY" --server "https://acme.zerossl.com/v2/DV90")
 }
@@ -40,4 +40,4 @@
     parse_eab_credentials $(curl -s https://api.zerossl.com/acme/eab-credentials-email --data "email=$ZEROSSL_EMAIL")
 fi

-certbot ${ARGS[@]}
+certbot ${CERTBOT_ARGS[@]}

[主題]
macOSで、zerossl-botが使えるかどうかについて考察したい。

[背景]
自宅Webサーバーのドメインを取得し、SSL化した。SSL証明書は、ウェブブラウザだけで取得できるZeroSSLから取得した。無料なので90日間で有効期限が切れる。
そこで、世の中にはACME(Automatic Certificate Management Environment)と呼ばれる、証明書取得を自動化する仕組みがあり、ZeroSSLも対応しているとサイトに書いているので、使えるのか検討して見た。

[環境]
参考までに、筆者の環境を記載しておく
MacBook Pro 2018 15.4inch(インテルMac)
macOS 13.2 Ventura
MacBook Pro 2016 13inch(インテルMac)
mmacOS 12.6.2

[結論]
いきなりだが、結論から先に言うと、zerossl-botは使えない。

[理由]
zerossl-botは、certbotのラッパースクリプトである。つまり、certbotZeroSSLで利用できるようにするシェルスクリプトである。
しかし、筆者の環境(MacBook Pro 2016)で確認した限りでは、certbotに制御が渡された段階(多分)でエラーが出た。

[実行したコマンド]
以下のコマンドを実行して見た。(メールアドレスとドメイン名はダミー)

sudo zerossl-bot certonly \
--webroot \
-w /usr/local/apache2/htdocs/ \
-m myEmail@example.com \
-d example.com

まず、普段使っているApacheにパスが通っている状態、すなわち:

$ which httpd
/usr/local/apache2/bin/httpd

となる状況下では、下図のようなエラーが出る。


稼働中のhttpdでの結果

二つのエラーについて説明する。

  1. –apache-bin is missing
    これは、理由が分からない。certbotのオプションに–apache-binを指定するスイッチがあるが、それを指定してもダメだった。

  2. Error while running apachectl configtest.(以下省略)
    まず第一に、これはwebrootモードの動作ではない。standaloneモードの動作である。webrootモードを指定しても、standaloeモードで動作する理由が分からない。
    加えて、そのstandaloneモードも、稼働中のApacheの設定ファイルがあるディレクトリではない/etc/apache2/other/に設定ファイルを作って、そのファイルで文法エラーを起こしているように思われる。(エラー発生後、ファイルが消去されるので、詳細は不明)
    こちらもcertbotのオプションに–apache-server-rootを指定するスイッチがあるが、それを指定してもダメだった。

これに対して、macOS標準のApacheにパスが通っている状態、すなわち:

$ which httpd
/usr/sbin/httpd

となる状況下では、下図のようなエラーが出る。


デフォルトのhttpdでの結果

こちらでは、–apache-bin is missingエラーは消える。代わりにSSLの設定がされていないと、怒られる。デフォルトのapacheに対しては、SSLに必要な設定をしていないので、一応は納得できる。

[推論]
二つのApacheで確認した結果から、certbotzerossl-bot)は、Apacheの実行ファイル(httpd)が、/usr/sbinにあり、設定ファイルが/etc/apache2にある前提で動いていると考えられる。これを設定変更するスイッチはあるが、受け付けられないか、zerossl-botから渡されないのではないか?
macOSデフォルトのApacheを設定変更する事は、事実上出来ないので、最終的にzerossl-botは、macOSでは動かないと言えると思う。

以上。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL