Gehirn RS2 Plus にローカルにある証明書を設定する
現時点では certbot の吐く証明書だけ設定できる、ローカルの証明書を RS2 Plus に適用するツール
- Let's encrypt の証明書を使いたいが、証明書の更新タイミングで手動でウェブコンソールから証明書を設定したくなかった
- Let's encrypt 証明書は期限が短かい
- そもそも手動って忘れるし面倒
- 自動化したい!!!!!
- 誰か書いてるかと思ったらないじゃん
- ドキュメントにない API だが叩いてよさそうだったのでやってしまおう
-
ドキュメントを整備していなくてご不便をかけますが、すべての機能には対応する API があって Web コンソールはそれを実行しているので、ブラウザの Developer Console などをみると参考になるかと … https://twitter.com/yosida95/status/1146611221530943488
-
すでに
- ドメインがある
- ドメインが RS2 Plus に登録されている
ことは前提とする。
初回のみ
- Gehirn RS2 Plus の API キーを取得する
- 静的鍵を作る
- ロールを割り当てる
- プロジェクト管理機能で APIクライアントにロールを割当てる | Gehirn Web Services サポートセンター
- 「Gehirn RS2 Plus アカウント管理者」にするのが最も簡単
- 後述の設定で
GEHIRN_CONTAINER_ID
で更新対象のプロジェクト (コンテナ) を特定する場合はアカウント個別設定の「Gehirn RS2 Plus アカウント管理者」でよい
- 後述の設定で
必要がある。
実行前には
- Certbot で証明書を取得し、ローカルに証明書が存在する
- 必要な環境変数がセットされている (後述)
必要がある。
設定は環境変数から行ない、次のように設定する。
# API 静的鍵の Basic から始まる行を全部コピーする
export GEHIRN_API_AUTHORIZE="(ここに Basic なんたらかんたらが入る)"
# GEHIRN_CONTAINER_ID, GEHIRN_CONTAINER_LABEL はどっちか指定すればよい
export GEHIRN_CONTAINER_ID="(アカウントID)"
export GEHIRN_CONTAINER_LABEL="(アカウントの名前)"
# certbot が証明書を置くディレクトリを指定する
export CERTBOT_DIRECTORY="/etc/letsencrypt"
# 対象のドメインを指定する
export SITE_DOMAIN="example.com"
あとは certbot のディレクトリにアクセスできる権限で実行するだけ!
npm install
npm run
エラーがなければなにも言わずに終了ステータス 0 で止まり、設定されているはず。
- 注意点はある?
- 環境変数を保存するファイルがあれば パーミッションを 700 に すべきです
- Gehirn RS2 Plus の API は証明書の秘密鍵も返却するようで、キーがあれば証明書を取得できます
- そうでなくても非常に権限の大きいキーとなるので慎重になるべきです
- とはいえ RS2 Plus は VPS のようなサービスなので、一般的なレンタルサーバーよりは問題は少ないのでは。PHP から読み取れるとかが恐いくらい
- 環境変数を保存するファイルがあれば パーミッションを 700 に すべきです
- これ Gehirn RS2 Plus でも動く?
- 執筆時点のデフォルトの Node.js (
v8.15.1
) で動作することは確認ずみ - 🎍 openssl call: use utf-8 encoding · otofune/configure-rs2p-certificates@b04fee7 のコミット以降なら動作するはず
- 執筆時点のデフォルトの Node.js (
- では Gehirn RS2 Plus 上で Let's encrypt な証明書の取得/更新を自動で行える?
- cron もあるし可能そうだったので記事を書きました
- certbot 以外に対応する
- 適当に書いたので TypeScript にする