Category:技術

7月

VeriSign のタイムスタンプ証明書の有効期限について気になる今日この頃。

VeriSign のAuthenticode用の証明書を使っています。 これは .exe や .cab ファイルなどにコードサイニングを行うためのマイクロソフトの仕様に沿った証明書で、昔は ActiveX 専用なイメージでしたが、最近は IE がファイルをダウンロードする時にも検証されるので、それなりに重要なものだったりします。

基本的に証明書の有効性は証明書自身の有効期間の間しか確認できません。(その為の有効期間なわけですから当然ですが) しかし、例えばインストーラを作成してウェブに公開するような時に、コードサイン用証明書の有効期限が切れて更新するたびに、公開している全てのファイルに対して署名をやり直すのは大変です。

こういった事にならないように、通常は署名時にタイムスタンプを付けておきます。タイムスタンプは「あるファイルがタイムスタンプをつけた時点で存在し、タイムスタンプをつけてからは変更されていない」事を証明するためのサービスで、デジタル署名にタイムスタンプがついている場合は、署名した証明書の有効期限が過ぎた後も、有効性を確認することができます。

ただ、タイムスタンプ自身も電子署名の一種なので、証明書の有効期限が存在します。この有効期限を過ぎるとタイムスタンプの有効性が確認できなくなるので、有効期間の残りが少なくなってくると意味がなくなってしまいます。

Read More

6月

IE8 上での開発でちょっとハマッタのでメモ

ActiveX や ToolBar(Browser Object) のデバッグを行うさいは、IE をデバッギー(debugee)としてVisual Studio からアタッチするのですが、今日久しぶりにやってみたら設定したブレークポイントで止まってくれません。

Visual Studio の設定ミスかと、しばらく試行錯誤しているうちに iexplore.exe のプロセスが複数いることに気がつきました。そこで、ようやく IE8 からタブごとに別プロセスで実行されることを思い出しました。

「じゃあ、自分がデバッグしたいプロセスを探してアタッチすれば。。。」と思ったのですが、毎回そんなことをやるのはさすがにめんどくさいので、Google先生に聞いてみました。

で、このサイトで解決策を発見。

IE8 がタブごとに独立したプロセスを生成しないようにレジストリの値を変更します。

  • キー: HKCU\Software\Microsoft\Internet Explorer\Main
  • 名前: TabProcGrowth (DWORD)
  • 値: 0

Windowsネタを書くのははじめてなのか。。。

3月

XenのイメージファイルをLinuxからマウントする方法のメモ

Xenのディスクイメージファイルは以下のように固定ディスクをそのままファイルに移したような構造になっています。

# file test.img
test.img: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x82, starthead 0, startsector 208845, 2104515 sectors; partition 3: ID=0x83, starthead 0, startsector 2313360, 18651465 sectors, code offset 0x48

なので、基本的にはループバック・デバイスとしてマウントする事が可能です。
ただし、ディスクイメージはパーティションに区切ってあると思いますので、その分にひと手間ひつようです。

基本的な作業の流れは以下のとおり。

  1. losetup コマンドでディスクイメージファイルをループバック・デバイスに割り当てる。
  2. kpartx コマンドでディスクイメージ内の各パーティションにデバイスファイルを割り当てる。
  3. 必要なパーティションのデバイスファイルを mount コマンドでマウントする。

Read More

2月

前回の記事でSNI(Server Name Indication)拡張を有効にしたnginxのバイナリを作成したので遊んでみました。SNI拡張は、個々の仮想ホスト(VirtualHost)で独自のサーバ証明書を利用するために作られた TLSv1 の拡張仕様です。

TLSやSSLを使ったウェブサーバーでは一般的には仮想ホストは使えない、という事になっています(何事にも例外はありますが。)仮想ホストは HTTP のリクエストヘッダの Host フィールドの値を元に振り分けられますが,HTTPのリクエストを出すよりも手前の TLS/SSL のハンドシェイク時にサーバ証明書の検証が行われるので,クライアントが接続しようとしているホスト名とサーバ証明書のホスト名が異なってしまい,不正な証明書と表示されてしまいます。

SNIは接続しようとしているホスト名を、クライアントからサーバに伝えるための仕様です。(ホスト名はハンドシェイク前に伝えないと行けないので、平文で送られる事になりますが。。。)これ自体は素晴らしいのですが,Windows XP の IE がサポートしていないので今ひとつ広まっていません。

Read More