前回構築した Bitwarden on Docker は http接続のみ対応で、
https接続非対応だったので、https対応にした。。。かった記録。
[追記] 全て上手く行くようになりました
→ [HTTPS化] Bitwarden を Docker で構築できた! その4 [vaultwarden]
もし間違いにお気づきの方がおられましたらコメントいただけるとありがたいです。
Contents
HTTPS化
前回も触れたが、最近の殆どのブラウザから http経由ではアカウントを作成することができない。
(http経由でアカウントを作成する方法はコチラ)
アカウントはできても、iOS版クライアントでは接続すらできない。
これを解決するために、vaultwarden をhttpsを介してアクセスできるようにする。
環境
一つ大きな前提条件は、今回 vaultwarden の dockerコンテナを走らせるホストマシンは、
外部公開されていない、ローカルネットワーク(イントラネット?) 上にある。
どうしても外からアクセスしたいときは、VPNやSSHトンネルなどを介して行う。
このあたりの境界条件が、ネットで見つかる vaultwarden/bitwarden_rs の各種導入記事とは異なることに注意。
セットアップ
Docker Compose を用いた導入方法は vaultwarden の wiki にある。
前半の "Caddy with HTTP challenge" は、外部公開されている環境の場合。
Let' Encrypt が外からポート80 を叩いて ACME HTTP-01 challenge を行える必要がある。
前述の通り、私の今回の環境は外部公開されていないマシンなので、この設定は使えない。
したがって、後半の "Caddy with DNS challenge" を参照する。
後半は以下のような環境用とある。
DuckDNS の設定
まずDuckDNS にアカウントを持っていない人は作成する。
DuckDNS は無料で使える Dynamic DNS です。
sub-domain にIPアドレスを紐づけて、sub-domain.duckdns.org で引けるようにしてくれます。
DuckDNS と調べると、フィッシング詐欺とかスパムショートメールとかいう言葉ばかり出てきて、あまりにも Google汚染がヒド過ぎる。。。
DuckDNS に IP address を登録する。
Let's Encrypt を用いた private な instance生成方法のページの DuckDNSの設定の項に、
とあるので、dockerホストのローカルIPを myvwarden(.duckdns.org) などに割り当てた。
docker-compose.yml
Docker-Composeによる導入方法のページの後半にある docker-compose.yml をコピペで用意する。
- DOMAIN: myvwarden.duckdns.org
- EMAIL: my@email.address
- DUCKDNS_TOKEN: DuckDNS's token(UUID)
上記を適宜自分に合うように変更する。
Caddy Custom build 取得
Dockerイメージ内の Caddy には、DNS challenge モジュールが含まれていないので、
それを含んだ Caddy を別途用意して、コンテナ内に見せるようにする。
対応するモジュールを含んだ Caddy は https://caddyserver.com/download からダウンロードできる。
Platform から Linux amd64 を選択、github.com/caddy-dns/duckdns
にチェックを入れて "ダウンロード"、
docker-compose.yml
と同じ場所において、caddy
にリネーム、$chmod a+x
で実行権限を付与する。
この caddy
が docker-compose.yml で参照されており、コンテナ内標準の caddy
を上書きするようになっている。
Caddyfile
Docker-Composeによる導入方法のページの後半にある Caddyfile をコピペして同じディレクトリに置く。
とあるので、一切変更はしていない。
コンテナの起動
1 |
$ docker-compose up (-d) |
するも、起動せず。。。
出力は大体こんな感じのが何度か繰り返される。
1 2 3 4 5 6 7 |
caddy | {"level":"info","ts":1621926155.6106822,"logger":"tls.issuance.acme.acme_client","msg":"trying to solve challenge","identifier":"myvwarden.duckdns.org","challenge_type":"dns-01","ca":"https://acme-staging-v02.api.letsencrypt.org/directory"} caddy | {"level":"error","ts":1621926155.61223,"logger":"tls.issuance.acme.acme_client","msg":"cleaning up solver","identifier":"myvwarden.duckdns.org","challenge_type":"dns-01","error":"no memory of presenting a DNS record for myvwarden.duckdns.org (probably OK if presenting failed)"} caddy | {"level":"warn","ts":1621926155.7707267,"logger":"tls.issuance.zerossl","msg":"missing email address for ZeroSSL; it is strongly recommended to set one for next time"} caddy | {"level":"info","ts":1621926156.7182052,"logger":"tls.issuance.zerossl","msg":"generated EAB credentials","key_id":"xxxxxxxxxxxxxxxxxxxx"} caddy | {"level":"info","ts":1621926160.6527693,"logger":"tls.issuance.acme.acme_client","msg":"trying to solve challenge","identifier":"myvwarden.duckdns.org","challenge_type":"dns-01","ca":"https://acme.zerossl.com/v2/DV90"} caddy | {"level":"error","ts":1621926160.6542778,"logger":"tls.issuance.acme.acme_client","msg":"cleaning up solver","identifier":"myvwarden.duckdns.org","challenge_type":"dns-01","error":"no memory of presenting a DNS record for myvwarden.duckdns.org (probably OK if presenting failed)"} caddy | {"level":"error","ts":1621926161.3037932,"logger":"tls.obtain","msg":"will retry","error":"[myvwarden.duckdns.org] Obtain: [myvwarden.duckdns.org] solving challenges: presenting for challenge: could not determine zone for domain \"_acme-challenge.myvwarden.duckdns.org\": could not find the start of authority for _acme-challenge.myvwarden.duckdns.org.: NXDOMAIN (order=https://acme.zerossl.com/v2/DV90/order/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) (ca=https://acme.zerossl.com/v2/DV90)","attempt":4,"retrying_in":300,"elapsed":328.892385675,"max_duration":2592000} |
最終行の acme.zerossl.com
へのリクエストを見ると、
という出力が返っているようだ。
というわけで、https化は叶わずまだ本格運用とは相成っていないのが現状。
また後日でも試してみて、上手くいったら記事にでもしようと思う。