FreeBSD で certbot が非常に導入しづらくなった
certbotはPythonで動くプロダクトだが、Pythonのセキュリティー系コンポーネントがRustに依存するようになったおかげでportsから導入するのに異常なコストを要求することになった。
Rustをパッケージ管理システムで入れる分にはそこまで思わないかもしれないが、ソースから環境をコンパイルするだけなのに異常にハイパフォーマンスな環境を要求され、ほとんどの環境ではコンパイルに失敗する。
ChatGPTに聞いてみた
それは非常によくわかります。特に FreeBSDのような非主流環境でのCertbot導入は、Python依存地獄+ビルド問題にRust依存が加わることで「証明書一枚取るのにここまで大変か」となることがよくあります。
🔧 状況整理:なぜCertbotでRustが必要になるのか?
Certbot自体はPython製ですが、依存する一部のライブラリ(特にセキュリティ系:cryptography
, pyOpenSSL
など)がRustで書かれたコンポーネント(例:cryptography >= 3.4
でRustが必要)に依存するようになったため、pip install certbot
や ports/security/py-certbot
などがRustを要求します。
✅ Rustなしで Let's Encrypt の証明書を取得する方法(代替案)
RustやPythonを導入せず、できる限り簡素な構成で証明書取得したい場合、以下の方法が現実的です:
1. acme.sh(シェルスクリプト製 ACME クライアント)
- 完全なBash/Zsh実装(Rust・Python不要)
- 軽量・簡単・FreeBSDでも完動
- ワイルドカード証明書、DNS認証、スタンドアロンHTTPサーバなど多彩なモードに対応
- Cloudflare、AWS、Route53 など主要DNSプロバイダとの統合も可能
🔧 インストール例(FreeBSDでもOK):
curl https://get.acme.sh | sh
~/.acme.sh/acme.sh --issue -d example.com --webroot /usr/local/www/example.com
✅ 特長
- 証明書の取得・更新が1コマンド
- 証明書は
~/.acme.sh
に保存、nginxやapacheと連携可能 - systemdではない環境にも適応しやすい
🔗 公式
2. lego(Go製のACMEクライアント)
- 静的バイナリで提供 → 導入が超簡単
- ワイルドカード、DNS-01、HTTP-01 に対応
- RustもPythonも一切不要
🔧 インストール例:
curl -LO https://github.com/go-acme/lego/releases/download/v4.15.0/lego_v4.15.0_freebsd_amd64.tar.gz
tar xf lego_*.tar.gz
./lego --email you@example.com --domains example.com --http --path /etc/ssl/lego run
✅ 特長
- 複数ドメインにも対応
- 自動更新スクリプトもあり
- DNSプロバイダ連携も多彩
🔗 公式
https://go-acme.github.io/lego/
3. dehydrated(シェルスクリプト製、元祖簡易クライアント)
- ACMEv1の頃からある軽量クライアント
- acme.shよりやや低機能だが、簡単
🔚 結論:Certbotがダメならacme.sh
が最良の代替
ツール | Rust不要 | Python不要 | FreeBSD適性 | 機能性 | 備考 |
---|---|---|---|---|---|
Certbot | ✕ | ✕ | △(Rust必須) | ◎ | 導入が困難 |
acme.sh | ◎ | ◎ | ◎ | ◎ | 推奨 |
lego | ◎ | ◎ | ◎ | ◎ | 静的バイナリで楽 |
dehydrated | ◎ | ◎ | ◎ | △ | シンプル派向け |
🔍 推奨アクション
- 今後はCertbotではなく
acme.sh
もしくはlego
に乗り換え - サーバ更新スクリプトやcronにそのまま組み込める
- Let's Encrypt本体の仕様変更にも対応が早い(acme.sh は活発にメンテナンス中)
acme.sh はマニュアルがすごく判りにくいんだよなぁ…
つづく、かもしれない。