McCoy を使ったアドオンの安全な更新方法の提供

Firefox 3 では、安全な更新方法が提供されていないアドオン、つまりインストールマニフェスト中の em:updateURL の値が https ではなく http プロトコルであるようなアドオンは、デフォルトでインストール不可となる。
どうしても em:updateURL の値を http プロトコルにしたければ、インストールマニフェストとアップデートマニフェストの両者へ以下のような細工を施す必要がある。

作業 ファイル 内容
#1 インストールマニフェスト
(install.rdf)
公開鍵を em:updateKey エントリとして追加する。
#2 アップデートマニフェスト
(update.rdf)
em:updateLink で示された XPI ファイルのハッシュ値を em:updateHash エントリとして追加する。
#3 マニフェストファイルに対する電子署名を em:signature エントリとして追加する。

このような細工を施すことで、以下のような仕組みにより安全な更新が可能となる。

  • アドオンマネージャで「更新の確認」を行った際、インストールマニフェスト中の公開鍵と、安全ではない経路からダウンロードしたアップデートマニフェスト中の電子署名を照合し、そのアップデートマニフェストの正当性を検証する。
  • アップデートマニフェストで示された新しいバージョンをインストールする際、アップデートマニフェスト中のハッシュ値と実際にダウンロードした XPI ファイルから算出したハッシュ値とを比較し、その XPI ファイルの正当性を検証する。

事前準備

上記作業#1~#3を実施するにあたり、事前に McCoy というアプリをインストールしておく。

作業#1の手順

  1. McCoy で「Create」ボタンを押して公開鍵(と秘密鍵)を生成する。
  2. 右クリックメニューの「Copy Public Key」から公開鍵をクリップボードにコピーする。
  3. 既に作成済みのインストールマニフェストへ <em:updateKey>{公開鍵の値}</em:updateKey> という行を追加する。

こうしてできあがったインストールマニフェストを含めて XPI ファイルを生成すれば、とりあえずはそのアドオンは Firefox 3 にインストール可能となる。なお、手順1で作成した公開鍵(と秘密鍵)は今後も同じものを使い続けるので、作業#1は一度実施すれば今後のバージョンアップ時はそのままで良い。
なお、手順1で作成した公開鍵(と秘密鍵)は、他のアドオンに対して使いまわしても構わない。

作業#2の手順

  1. XPI ファイルの SHA1 ハッシュ値を求める。
    SHA1 ハッシュの求め方は、 Win 用アプリ bkhashes, Firefox 拡張機能 MDHashTool, Cygwin の sha1sum コマンド、PHP の sha1_file 関数などがある。
  2. 既に作成済みのアップデートマニフェストへ <em:updateHash>sha1:{ハッシュの値}</em:updateHash> という行を追加する。
    ただし、 XML 構造によっては em:updateHash=”sha1:{ハッシュの値}” という記述となる場合もある。

SHA1 ハッシュ値は、 XPI ファイルが1バイトでも違えばまったく異なる値となるので、 XPI ファイルをパッケージングするたびに作業#2を実施する必要がある。

作業#3の手順

  1. McCoy にて作業#1で作成した公開鍵を選択し、「Sign」ボタンを押して作業#2で作成したアップデートマニフェストのファイルを選択する。
  2. アップデートマニフェストへ自動的に em:signature エントリが追加される。

McCoy によって自動生成されたアップデートマニフェストは、XML の構造が少し複雑である。だが、このファイルを手動で編集してはならない。ちょっとでも編集すると、アドオンマネージャにて更新情報を検知できなくなってしまう。
自分は XML 構造が変わるのが嫌なので、手動で編集するためのアップデートマニフェストと、 McCoy で電子署名を付加したアップデートマニフェストとを別々に管理している。
なお、当然ながら作業#2で em:updateHash の値を書き換えたら、その都度作業#3を実施する必要がある。

動作確認手順

実際にアドオンマネージャにて更新確認と新しいバージョンのインストールの動作確認を行うための手順を示す。

  1. インストールマニフェストに対して作業#1を実施する。
  2. 1. のインストールマニフェストを含めた XPI インストーラを作成し、 Firefox へインストールする。
  3. 1. のインストールマニフェストの em:version の値を上げる。
  4. 3. のインストールマニフェストを含めた XPI インストーラを作成する。
  5. 4. の XPI インストーラから SHA1ハッシュを生成し、アップデートマニフェストに対して作業#2を実施する。
  6. 5. のアップデートマニフェストに対して作業#3を実施する。
  7. 4. と 6. の2ファイルを Webサーバへデプロイする。
  8. アドオンマネージャにて「更新を確認」する。

参考

Latest topics > XML署名とハッシュを使って安全な方法でアドオンを更新できるようにする – outsider reflex
くでんな日々や公開どう? ◆ [Mozilla] さぁ、McCoyをはじめよう!!
Install Manifests – MDC
Extension Versioning, Update and Compatibility – MDC
McCoy – MDC

TOP

1 Comment to “McCoy を使ったアドオンの安全な更新方法の提供”

ScrapBookアドオンのAutoSaveが安全な更新方法が提供されていないのでインストールできないのですが、この方法でということなんでしょうか?

TOP

TOP