X509証明書について調査

以前より、SSLのためおれおれサーバ証明などを作成していましたが、
拡張子とか、中身がわけわかめだったため、整理のために調査をした。

拡張子

最初、ファイルの拡張子が沢山出てきて戸惑ったが、
どうやら重要なのは「秘密鍵(.key)」「証明書要求(.csr)」「証明書(.crt)」の3つ。
作成ステップは秘密鍵→証明書要求→証明書の順。

openssl genrsa で作成可能。
  • .csr - 証明書要求。ファイル中に要求元の公開鍵や作成してほしい内容が入っています。pkcs#10。
 openssl req -new -key .key
  秘密鍵から証明書要求を作成。
 perl ..\bin\CA.pl -newreq-nodes (CA.pl内ではopenssl req -new -nodes -keyout key.pem -out req.pemを実行)
  秘密鍵を作成しつつ、証明書要求も作成。
  • .crt - 証明書。公開鍵はこの中に含まれています。逆に秘密鍵は含まれていない。
 openssl x509 -in .csr -out .crt -signkey .ken -req
  秘密鍵と証明書要求から証明書を作成
 perl ..\bin\CA.pl -sign (-out cert.pem -infiles req.pem)
  裏で作成していた証明書要求から証明書を作成。
 perl ..\bin\CA.pl -newca  (openssl -req -new -keyout; openssl ca -out crt.pem -selfsign)
  CA証明書の作成のため、秘密鍵や自己署名(ルート)証明書を一気に作成。


後の拡張子は、複数ファイルを合体させるための入れ物だったり、中の形式を変えたい時(主にバイナリかbase64か)に使用する。

  • .pem - 秘密鍵や証明書、証明書要求の入れ物。Base64の形式。この形式(base64)でないと受け付けてくれないツールがある(例えば、パケットキャプチャソフトのWireShark)。
  • .derと.cer - 中身は証明書のみ。バイナリ形式。通常の.crtだとbase64形式のようで、古いブラウザ(今も?)などにインポートする際は、バイナリ形式しか対応していない場合がある。そういう時にこれらの形式を使用する。
  • .pfxと.p12 - 中身は秘密鍵+証明書。pkcs#12。1つのファイルになるので持ち運びが便利な形式。実際はインポートやエキスポート時に使われている模様。例えばapacheIISに持っていくときに使用。pfxはp12の前身。


pfxの仕様が見つからないためp12(pkcs12)との違いが分からないヘ(゚∀゚ヘ)

ASN.1解析

証明書系は(大抵?)ASN.1という形式になっている。
中身を確認したいときに以下のサイトやツールを使うと良い感じかも。

自堕落な技術者の日記 : オススメASN.1ビューアaatool - livedoor Blog(ブログ)
ASN.1 encoder/decoder on JavaScript (v0.3)
openssl asn1parseコマンド
mino's software

証明書作成ツール(オレオレ用)

証明書を作成するツール


makecert.exeはまだ、触ったことがないです。
どのツールを使うにせよCN(CommonName、一般名)と期限を自由に弄れないと、ブラウザが警告を出してくるなど後で困る羽目になります><

APIとか

プログラムで証明書を弄ることがどういうときなのか分かっていませんが、
検証ツールを自作するときとかに使えるかもと考えています。


Microsoft
http://www.trustss.co.jp/smnCrypt000.html
http://msdn.microsoft.com/ja-jp/library/system.security.cryptography.x509certificates.x509store(VS.80).aspx
Java
http://www9.atwiki.jp/kurushima/pages/47.html
LangEdge,Inc. [オープンソース暗号]
http://www.langedge.jp/pub/oss_security.html