HTTP Signatureの署名対象文字列

2026/1/11 [08:22:15] (日) 天気

2023年にActivityPubを自作実装した時に、うまく意図通りにいかなくて悶絶したのがHTTP Signatureの作成と認証確認。

検索しまくって何度も何度も試行錯誤した。


RSAというかCryptは今もよくわからないまま。

「Crypt::Perl - Cryptography in pure Perl」

↑META::CPANで公開されているモジュールをありがたく使わせてもらっている。


「HTTP Signatureをlolipopレンタルサーバーで作成」 にも書いたけど、このモジュールはpure perl、すべてperlだけで書かれている。

perlを使えるサーバーだったらどこでも、誰でもインストールして使えるのが素晴しい。


phpやruby、pythonを使えるサーバーも増えてきてるとはいえ、たぶんまだ全部のサーバー、特にレンタルサーバーで使えるとは限らない。

だけど、perlが使えないサーバーなど存在しない、はず。


で、ここからが今回のエントリ…本題に入るまでが長いのは老人特有の症状。


・HTTPヘッダに署名をつけてリクエストをする必要があるのはわかった。

・署名するためのモジュールも使い方はわかった。


わからなかったのが「んじゃそれって、いったい何を対象に署名するの?」というところ。


結局、HTTPヘッダなど、環境変数で取れるもので署名の対象を作るんだけど、今度はそれをどんな形で検証生成のモジュールに渡せばいいのかがわからない。


具体例を探して右往左往。

必要とされる環境変数の「キー」と「値」を「コロンと半角空白」で繋いだ文字列にして集めて、その文字列を最後に「改行」で繋いだ文字列にしたものが、署名の対象となる。


署名の生成認証は対象となる文字がひとつでも違ってたら通らない。

厳密厳格なのが当たり前。

余計な空白やダブルクオート、セミコロンなんかが入ってることに気づかない自分の雑な性格を呪う日々だった。


なもんで、あまり触りたくない、のが本音。

web本棚をActivityPub対応した時に、このSignatureまわりをすっかり忘れてたので復習。


具体的なコードはホームページに掲載した。

「HTTP Signatureの解析::On Golden Pond」


image
<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】