PHPからChrome拡張機能(Chromeテーマ)を生成したい。私のPHPスクリプトはzipファイル(download.zip)を生成します。.crxパッケージに変換するには、公開鍵と署名を含むヘッダーを追加する必要があります。
この答えを見ましたが、.pubファイルを生成する.pemファイルが必要です。私は共有ホスティングを使用しているため、exec()は機能しません(.pemを.pubに変換するため)。.pemファイルは必要ありません。ダウンロードすると、一度だけ使用する必要があります(更新は必要ありません)。
次に、秘密鍵と公開鍵を生成できることを説明するこのコメントを見ました。2つのスクリプトを組み合わせても機能しません(コードを参照)。
キーペアを生成し、それを使用してPHPでchrome .crxパッケージに署名するにはどうすればよいですか?
このコードは失敗します(CRX_SIGNATURE_VERIFICATION_INITALIZATION_FAILED):
// Create the keypair
$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $pk);
// Get public key
$key=openssl_pkey_get_details($res);
$key=$key["key"];
# make a SHA1 signature using our private key
openssl_sign(file_get_contents('download.zip'), $signature, $pk, 'sha1');
# decode the public key
$key = base64_decode($key);
# .crx package format:
#
# magic number char(4)
# crx format ver byte(4)
# pub key lenth byte(4)
# signature length byte(4)
# public key string
# signature string
# package contents, zipped string
#
# see http://code.google.com/chrome/extensions/crx.html
#
$fh = fopen('extension.crx', 'wb');
fwrite($fh, 'Cr24'); // extension file magic number
fwrite($fh, pack('V', 2)); // crx format version
fwrite($fh, pack('V', strlen($key))); // public key length
fwrite($fh, pack('V', strlen($signature))); // signature length
fwrite($fh, $key); // public key
fwrite($fh, $signature); // signature
fwrite($fh, file_get_contents('download.zip')); // package contents, zipped
fclose($fh);