Skip to content

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 を使用しています。

また、以下のバグを潰さないと動かないので雑に修正しています

Merge request reports