Firefoxを使ってWPA EnterpriseのためのCA/証明書を作る

書きかけ
※ IA32、Linux/Windows以外では無理(extensionの都合)
とりあえずEAP-PEAPのためにサーバ証明書EAP-TLSのためのクライアント証明書もほぼ同じ手順を繰り返せば作ることが出来る。

まず、この辺を読んでおく。同じ事をopensslコマンドの代わりにFirefoxのExtensionであるところのkey manager toolboxでやろうというのが趣旨。

key manager toolboxの導入

一部のプラットフォームにしか対応していないので、必要に応じてLinuxまたはWindows版のFirefoxを使うなど。

基本概念

  • 本来、CAと証明書を発行して貰う人は他人同士
  • CAですら、他人の秘密鍵は知ることが無い
  • CSR(PKCS#10)をCAに送信することで、いわゆる証明書がCAから送られてくる
  • これらの手順を行う

CA証明書 : 作成

CA証明書は基本的にいわゆるオレオレ証明書となる。なぜなら、CAの証明書は信頼性の起点で、CAに対する信頼はシステムの外で構築されるため。

  1. Firefoxの『ツール』からkey manager tool box→key managerを開く
  2. Generate Self-Signed Cert
  3. プロファイルとして、No Extensionを選ぶ
  4. First NameがCommonNameになることに注意しつつサブジェクトを埋める
  5. RSA、2048bitくらいにして、Sig AlgからSHA1を選ぶ。SHA256とかを選ぶとWindows XP以前のWindowsで使えない鍵が出来る
  6. Standard Extensionsから、
    1. Basic ConstraintsをActive、is CA (必須)
    2. Extended Key Usageから、Server Auth、Client Auth (ファイルxpextensionsに相当)
  7. 他はチェックしない

Generate Self-Signed Cert。

サーバ秘密鍵 : 作成

最初はオレオレ証明書を作り、CAによって箔を付ける。
作り方はほぼ同様。
Key Managerに表示されている鍵を何もクリックせずに(バックアップなどのボタンがグレーアウトしていることを確認して)、Generate Self-Signed CertからCAで作った鍵の手順を繰り返す。
ただし、

  • CommonName(表示上firstname)をサーバのDNS名にする
  • Basic Constraintsからis CAを外す
  • Extended Key UsageからClient Authを外す

サーバ証明書 : 証明書のサイン

生成したサーバの自己署名証明書をクリックして、Sign (Proxy) Cert。これはProxy Certでないので、チェックボックスを外す。
以下の手順は何故か順番が重要

  1. Certificate Signer InfoからAny Usageを選択し、作成したCAの名前を選ぶ
  2. CSR SourceからCert、Self-Signed User Cert Onlyを選び、サーバ証明書の名前を選ぶ
  3. Sign Cert
  4. 適当な所に保存

欠点

  • CRLが発行できない
    • 要するに一度発行した証明書をRevokeできない
  • 幾つかのCA動作をしないので、これは共有鍵と同程度の安全性しかない。鍵ファイルをコピーされたら終わる。

結論

無線LANの認証に使うと言うよりは、Apache+SSLのテスト用に使うとかの方が実用性としては高いかも知れない。
sshの方が楽でいいよなぁ。。ssh-keygenでPKCS方式のRSA鍵ペアは生成できるので、それを流用した方が早いかと思ったけど、意外とASN.1で鍵プロファイルを作れる簡単なツールが無かった。。