Firefox 3ではじめる拡張機能開発

第8回 電子署名済みアップデートマニフェストを用いた拡張機能の配布

この記事を読むのに必要な時間:およそ 4.5 分

前回「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)。一度生成した公開鍵・秘密鍵のペアは,今後もずっと同じものを使い続ける必要があります。したがって,公開鍵・秘密鍵のペア生成の手順は,一度だけ実施すればかまいません。また,作成した公開鍵・秘密鍵のペアを,他の拡張機能に対して使いまわしても問題ありません。

図1 McCoyでの公開鍵・秘密鍵のペア生成

図1 McCoyでの公開鍵・秘密鍵のペア生成

インストールマニフェストへの公開鍵追加

続いて,先ほどMcCoyで生成した公開鍵・秘密鍵のペアを選択し,右クリックメニューの「Copy Public Key」から公開鍵の値をリップボードにコピーします図2)。さらに,既に作成済みのインストールマニフェストへ,リスト1のように<em:updateKey>{公開鍵の値}</em:updateKey>という行を追加します。

図2 McCoyで公開鍵の値をクリップボードへコピー

図2 McCoyで公開鍵の値をクリップボードへコピー

リスト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>タグの値を変更する必要はありません。

著者プロフィール

Gomita

拡張機能開発者。
現在までにScrapBook,FoxAge2ch,Tab Scope,FireGesturesの4つをリリースしている。

URLhttp://www.xuldev.org/

コメント

コメントの記入