ActivityPubでリモートのオブジェクトをGETするときのリクエストをHTTP Signatureで署名するオプション
Summary
Resolve #6727 (closed)
ActivityPubでリモートのオブジェクトをGETするときのリクエストをHTTP Signatureで署名するオプション追加。
default.ymlにsignToActivityPubGet: true
, (default: false)
このオプションを有効にすると、 Mastodon v3.x の以下のオプションなどで署名を強制しているサーバーからオブジェクトを取得できるようになります。
https://docs.joinmastodon.org/admin/config/#basic
AUTHORIZED_FETCH
ただし、このオプションを有効にするデメリットは
- 署名を付けるコストが少し増える
- Mastodonは (署名を強制しているサーバーでなくても) 常に署名の検証はしているようなので、Mastodonからの応答は (nginx等でキャッシュされてない限り) 少し遅くなると思われる。
- Mastodon v3.1.0 未満には (署名を強制しているサーバーでなくても) GETに署名が付いている&取得元に疎通ができない 場合に500になる問題があるので、リモートから疎通できない環境にあるインスタンスは常に Mastodon v3.1.0 未満からオブジェクトを取得できなくなる。
がある割に、このオプションが必要なMastodonサーバーがほぼないと思われるためデフォルトでは有効にしてません。
実装メモ
- 署名は
instance.actor
という名前のシステムユーザーを作成して行います - HTTP SignatureのライブラリはNode.jsのhttpsのClientRequestを変更する必要がありますが、GETでNode.jsのhttpsを使用するとRedirectもContent-Encodingのサポートなどもなくなってしまうので、ClientRequestが触れるライブラリ got を使用しています。
また、以下のバグを潰さないと動かないので雑に修正しています
- Fix #5582 (closed) v12で消えているリモートにリプライ等できる機能を復活 https://github.com/syuilo/misskey/issues/5582#issuecomment-708142428
- v12.48.0 で「連合に照会中」ダイアログ周りがバグってうまく動かないので一旦削除