HTTP Signatureをlolipopレンタルサーバーで作成

2023/8/22 [09:42:59] (火) 天気

ActivityPubでPOSTするには電子署名が必要。

というエントリを書いたけど、WEBでサーバー同士でやりとりしたり、WEBサービスのAPIを利用したり、電子署名が必要なのはActivityPubに限らず。


ちらほら書いてきたように、lolipopレンタルサーバーにはperlで電子署名をする時によく使われるモジュール「Crypt::OpenSSL::RSA」がインストールされていない。

ということは。lolipopではHTTP Signatureを作ることができない「Cryptが使えないんじゃ話にならない」ということになる。


しょうがないんで、ローカルにcpanから「Crypt::OpenSSL::RSA」をインストールして、ActivityPubにPOSTする時はローカルのスクリプトを使う、という急場しのぎ。

これはこれで、投稿するのにひと手間あった方が事故も起こさなくていいかな、と思ってやってたんだけど、やっぱりサーバー上だけでやれるならラクちんなことは確か。


なもんで、グーグル先生にお願いしてみたら

「Crypt-Perl-0.38」https://metacpan.org/pod/Crypt::Perl

↑pure perlのCryptモジュールがあった。


インストール時にコンパイルが必要なモジュールはOSやファイル構成、環境に依存するけど、PurePerlというのはperlだけで作られているので、perlさえあればサーバーにそのままアップロードして使える。


さっそくダウンロードして展開。テストスクリプトで試したところ、依存関係で必要なモジュールがあったのでそいつらもダウンロードして展開。


Class-Accessor-0.51

Bytes-Random-Secure-Tiny-1.011

Convert-ASN1-0.34

Crypt-Format-0.12

(あと、たぶん以前amazonのAPIがらみでインストール済みのpure perlのDigest::SHAも必要)

当然ながら(?)これらのモジュールもpure perlなので、コンパイル不要、展開するだけで使える。


サーバーの適当なところ、例えば「lib」というディレクトリを作って展開したファイル群をアップロードするだけ。

lib/Bytes/

lib/Class/

lib/Convert/

lib/Crypt/

スクリプトでuse lib ’lib’などとやればlolipopレンタルサーバーでもCrypt RSAが使えるようになる。


いや。ぶっちゃけ。これらモジュールの作者のみなさんには大感謝。大袈裟じゃなく狂喜乱舞小躍りだった。ほんとうにありがとうございます。

マジperl使いすげー。perl話者が減ってるだろう昨今、凄腕のperl使いはワシントン条約で保護すべき存在。


使い方は「RSAモジュールで公開鍵と秘密鍵」とほぼ同じ。


秘密鍵を使う

my $privatekey = Crypt::Perl::RSA::Parse::private($private-pem);

公開鍵を使う

my $publickey = Crypt::Perl::RSA::Parse::public($public-pem);


Signatureを作る。

my $sign = $privatekey->sign_RS256($sign-str);
encode_base64($sign, "");

Signatureを検証する。

my $decoded = decode_base64($sign);
$publickey->verify_RS256($sign-str, $decoded);


あとは。

こうすると、思いつきから投稿放流までが直結するので、事故を起こさない自制心が必要となるです、はい。

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

【最近の20件】