mutt の S/MIME 機能の利用法

- contrib/smime.rc の内容を .muttrc に追加します。smime_sign_as の行の
  変更については心配無用です。この後でちゃんと変更しますから。

- 'smime_keys init' を実行します。

- OpenSSL をダウンロードしてインストールします。

- 証明書を取得します。(www.thawte.com から無料でもらえますし、VeriSign や
  他の同業者に代金を払って入手することもできます。) 一般的な方法では、
  証明書はウェブブラウザの「中に」インストールされます。どのアプリケイション
  で証明書を使うか聞かれた場合には Netscape を選びます。まったく奇妙なことに
  "mutt" は選択肢にないのが普通です。

- Mozilla を使っているとすると、
  www.verisignlabs.com/Projects/smime_docs/linux.html の指示に従えば
  証明書を cert.p12 というファイルにエクスポートできます。Mozilla を
  使っていない場合は、自分でどうにかしてください。

- "smime_keys add_p12 cert.p12" を実行します。

    * スクリプトが "Import password" の入力を求めたときには、証明書を
      エクスポートしたときに付けたパスワードを入れます。

    * "PEM pass phrase" を聞かれたときには、新しいパスワードを作ります。
      これからメッセイジを署名したり復号化するたびに、mutt がこの PEM
      パスフレイズを聞いてくることになります。

    * 最後に、スクリプトは "label" をどうするか聞いてくるので、証明書に
      何か覚えやすい名前 ("jibun" など) を付けます。すると、スクリプトの
      出力には次のような行が含まれるはずです。

      added private key: /home/raldi/.smime/keys/12345678.0 for raldi@verisignlabs.com

      この、最後に ".0" の付いた数字が自分の鍵 ID です。次のステップでは
      この数字が必要になります。

- muttrc の smime_sign_as の行を編集します。鍵 ID を自分の ID にしてください。

- contrib/ca-bundle.crt にある、信用できるルート証明書をインポートしておくと
  良いでしょう。そうしておけば、その中のどれかによって完全に正しく署名
  されたものを自分も信用するようになります。これは "smime_keys add_root" を
  使っておこなえますし、mutt の smime_ca_location 変数で指定してある場所に
  ca-bundle.crt をコピーするだけでもかまいません。



その他の注記

鍵は OpenSSL の CA ディレクトリとよく似た方法で管理されます。秘密鍵と証明書は
違うディレクトリに格納されます。それぞれ別の一つずつのファイルとして
OpenSSL に渡す必要があるからです。また、各ディレクトリには '.index' という
名前のファイルがあり、その各行に幾つかの項目があります (行はソートされて
いません)。項目は、メイルボックス、鍵 ID, ラベル、中間証明書の ID, 鍵フラグ
です。

    * 鍵 ID は証明書の subject 欄に由来するハッシュ値で、OpenSSL が付けて
      くれます。

    * メイルボックスアドレスはメッセイジの From または Sender 欄に由来し、
      証明書の email 欄に合致します。合致しないものは拒否されて、証明書は
      メイルボックスアドレスのない状態になります。(これはセキュリティの
      ためですが、もしかすると変更可能にすべきかもしれません。)

    * ラベルは、鍵ペアをデイタベイスに入れる際に perl スクリプトが
      入力を要求して、それによって設定されます。残りの二つの項目も同じです。

    * 鍵フラグは perl スクリプトの証明書検証オプションで設定されます。
      以下のいずれか一つの値をとることができます。i: 不正 (検証失敗),
      r: 破棄済み、e: 期限切れ、u: 未検証、v: 検証成功、t: 信用済み。
      信用済みとは、正しく検証され、かつ、自分でそれを信用することを選んだ
      ということです (スクリプトが尋ねてきます)。mutt は、不正、破棄済み、
      また期限切れの証明書を署名や暗号化に使いません。未検証の証明書は
      使用前に確認しますし、検証に成功していても未信用の証明書には、使用前に
      警告を出します。

証明書の purpose 欄は今のところ検証されませんし、指定されたファイルが
本当に証明書なのかどうかのチェックも、実際のところ、まったくありません。

もうお分かりかと思いますが、鍵の取得は、指定したメイルボックスアドレスを
index ファイルの中で探すことによっておこなわれます。もし一つも見付からない
場合には、使える鍵の一覧が表示されてそこから選ぶことになります。

muttrc の中で指定された証明書や鍵ディレクトリは、既に存在していなくては
なりません。Mutt は作成してくれないからです。メッセイジに署名したいと
思っているのであれば、現在の mutt は (今のところ?) PKCS10 や PKCS12 を
作成できないということにご注意ください。つまり、有効な証明書を mutt の外で
入手する必要があるということです。(上述の方法をご覧ください)



~/.mailcap に次の内容を追加すると、証明書が閲覧できるようになります。

application/x-pkcs7-signature;openssl pkcs7 -in %s -inform der -noout \
-print_certs -text | less; needsterminal
