前回の「Firefox 3での自動更新のセキュリティ的な制約」で解説したように,httpsプロトコルでの暗号化通信に対応していないWebサーバで拡張機能を配布するには,「自分で作成したアップデートマニフェストへ電子署名を施して拡張機能を配布する」必要があります。今回はこの手順について解説します。
なお,実際に作成したインストーラおよびアップデートマニフェストは,下記URLから入手可能です。
手順の概要
この方式では,具体的にはインストールマニフェストとアップデートマニフェストに対して以下の3つの作業を実施します。
- (1) インストールマニフェストへ公開鍵を追加する
- (2) アップデートマニフェストへインストーラのハッシュ値を追加する
- (3) アップデートマニフェストへ電子署名を施す
すると,以下のような仕組みにより安全な自動更新が可能となります。
- アドオンマネージャで「更新を確認」する際,インストールマニフェスト中に記載された公開鍵と,安全ではない通信経路(httpプロトコルのURL)から取得したアップデートマニフェスト中の電子署名とを照合し,アップデートマニフェストの正当性(通信経路の途中で改ざんされていないこと)を検証する。
- アドオンマネージャで「更新をインストール」する際,アップデートマニフェスト中に記載されたインストーラのハッシュ値と,実際にダウンロードしたインストーラから算出したハッシュ値とを照合し,そのインストーラの正当性を検証する。
McCoyのインストールと公開鍵・秘密鍵のペア生成
「手順の概要」で示した作業は「McCoy」と呼ばれるアプリケーションを使用することで比較的楽に行えるようになります。McCoyは下記URLのページの「McCoy のインストール」から入手可能です。
McCoyを初めて起動すると,マスターパスワードの入力を求められます。McCoy起動後,「Create」ボタンをクリックすると,「Create a New Key」ダイアログが表示されます。ここに適用な名前(例えば「test」)を入力すると,新しい公開鍵・秘密鍵のペアが生成されます(図1)。一度生成した公開鍵・秘密鍵のペアは,今後もずっと同じものを使い続ける必要があります。したがって,公開鍵・秘密鍵のペア生成の手順は,一度だけ実施すればかまいません。また,作成した公開鍵・秘密鍵のペアを,他の拡張機能に対して使いまわしても問題ありません。
インストールマニフェストへの公開鍵追加
続いて,先ほどMcCoyで生成した公開鍵・秘密鍵のペアを選択し,右クリックメニューの「Copy Public Key」から公開鍵の値をリップボードにコピーします(図2)。さらに,既に作成済みのインストールマニフェストへ,リスト1のように<em:updateKey>{公開鍵の値}</em:updateKey>という行を追加します。
リスト1 インストールマニフェストの修正(例)
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>taghelper@xuldev.org</em:id>
<em:type>2</em:type>
<em:name>Tag Helper</em:name>
<em:version>0.8</em:version>
<em:description>Generates bookmark tags from the selection.</em:description>
<em:creator>Your Name</em:creator>
<em:homepageURL>http://www.xuldev.org/misc/sd.php</em:homepageURL>
<em:updateURL>http://some-server/taghelper/update.rdf</em:updateURL>
<em:updateKey>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCf+spGKCACaOJLeU8pEAIzdr7ipw393H5cU09OXNcKAoeVNGa4bx9cTW9xh08WOxAI8M2bhsusLk+TJ6IntOyIcF2L5W52EnCHmS/UtP8Cudk215L5lC2NjbeeCAw+qbyQY6shM4LZdBz0/amFln3go+7/2NfyxEMWBNkFlTGErQIDAQAB</em:updateKey>
<em:localized>
<Description>
<em:locale>ja</em:locale>
<em:name>タグヘルパー</em:name>
<em:description>選択範囲からブックマークのタグを生成します。</em:description>
<em:creator>あなたの名前</em:creator>
</Description>
</em:localized>
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>3.0</em:minVersion>
<em:maxVersion>3.0.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
インストールマニフェストの修正が完了したら,第7回で解説した手順でXPI形式のインストーラを再作成します。なお,前述の通り公開鍵・秘密鍵のペアは今後同一のものを使い続けるので,今後新しいバージョンのインストーラを作成する際に<em:updateKey>タグの値を変更する必要はありません。

