ネットワークエンジニアを自称していながらエンジニアらしいことはほとんど書いていなかったのですが今日は技術ネタです。
Linuxで独自CA局を立て、いわゆるオレオレ証明書を作ってみたので手順化しました。

【作ったもの】
・認証局(CA秘密鍵、ルート証明書)
・クライアント証明書
・サーバ証明書

手順書レベルなので初めての人でもこの通りやればできると思います。

■■■ 事前準備 ■■■

■作業環境
CentOS6.0

■opensslのインストール
opensslはインストールされている前提で手順省略

■拡張子のネーミングルール
ググると.pem、.crt、.keyなどいろんな拡張子が出てくるが基本的に何でもよい。
この手順では以下のルールで作成する。

  ・CA秘密鍵 cakey.pem
  ・ルート証明書 cacert.pem
  ・秘密鍵 xxx.key
  ・各種証明書  xxx.cer → .cerとするとはWindows上では証明書と認識してくれる。
  ・CSR xxx.csr
  ・pkcs12 xxx.p12 → 秘密鍵と証明書を1つのファイルにまとめる際にpkcs12形式を使う。

■Directory構成
以下のDirectoryを事前に作成する。
opensslルートディレクトリ: /var/ssl/CA
CA秘密鍵設置ディレクトリ: /var/ssl/CA/private
サーバ証明書関連: /var/ssl/CA/server_cert
クライアント証明書関連: /var/ssl/CA/client_cert
サーバ証明書フォルダ尾: /var/ssl/CA/newcerts → 実際のこのDirectoryは使わないが、無いと今後のコマンドがエラーとなるため作成



■■■ CA局開設 ■■■

■opensslの設定ファイルの編集
CentOS5および6では設定ファイルは以下のパス。
/etc/pki/tls/openssl.cnf

# cd /etc/pki/tls/
# cp openssl.cnf open.ssl.default → デフォルトファイルのバックアップ
# vi openssl.cnf で以下のとおり編集

dir = ../../CA # Where everything is kept

dir = /var/ssl/CA # Where everything is kept

 ⇒opensslのルートDirectoryを指定します。ここでは/var/ssl/CAとしてます。


default_days = 365

default_days = 3650

 ⇒認証局が発行する証明書のデフォルト有効期間を1年から10年に変更してます。


■CA秘密鍵の作成
以下のコマンド実行
# cd /var/ssl/CA
# openssl genrsa -des3 -out /var/ssl/CA/private/cakey.pem 1024
 ⇒ des3で暗号化したパスフレーズ付き秘密鍵が作れる。
  「-des3」を省くとパスフレーズなしの秘密鍵となる。

■CA証明書(ルート証明書)の作成
CA秘密鍵を元にルート証明書を作成します。以下のコマンド実行。
# openssl req -new -x509 -key /var/ssl/CA/private/cakey.pem -out /var/ssl/CA/cacert.pem -days 3650

※ cakey.pem → CAの秘密鍵
※ cacert.pem → ルート証明書

 ⇒ 対話式にC,St,O,OU,CNなどを入力し、入力した値は記録しておくこと。
 ⇒ 認証局そのものの有効期間は-days引数で指定する。

■indexファイルとserialファイルの作成
# cd /var/ssl/CA
# touch index.txt → 発行する証明書のindexファイル作成
# touch serial → 発行するシリアル番号のファイル
# echo "01" > serial  → デフォルトで数値を記入しないと今後のコマンドでエラーとなる


■■■ サーバ証明書の作成手順 ■■■

■CSR作成
サーバ証明書をインストールしたい機器でCSRを作成する。
手順はその機器やソフトによる。

opensslでCSRを作成する場合は以下のとおり。(www.hoge.comを想定)
・秘密鍵作成
# mkdir /var/ssl/CA/server_cert/www.hoge.com
# cd /var/ssl/CA/server_cert/www.hoge.com
# openssl genrsa -out www.hoge.com.key 1024

・秘密鍵を元にCSR作成
# openssl req -new -key www.hoge.com.key -out www.hoge.com.csr


■CSRを署名して証明書を発行(www.hoge.comを想定)

・入手したCSRファイルを/var/ssl/CA/server_cert/www.hoge.com/に保存

・以下のコマンド実行して証明書発行
# cd /var/ssl/CA/server_cert/www.hoge.com
# openssl ca -policy policy_anything -out www.hoge.com.cer -infiles [csrのファイル名]
 ※デフォルトは「polixu_match」でCAと国名や都道府県名等が一致していなければいけないが、
  「policy_anything」オプションをつけることでそのチェックが無効となる。

 ⇒www.hoge.com.cerという名称のサーバ証明書が出力される。


■■■ クライアント証明書の作成手順(CN=test01用を想定した手順) ■■■


■クライアントkey発行
# cd /var/ssl/CA/client_cert
# openssl genrsa -out test01.key 1024

■クライアントCSR発行
openssl req -new -key test01.key -out test01.csr

■クライアントCSRの署名(クライアント証明書の発行)
openssl ca -out test01.cer -infiles test01.csr

■p12ファイル作成
秘密鍵とクライアント証明書をpkcs12形式でまとめます。
openssl pkcs12 -export -in test01.cer -inkey test01.key -out test01.p12

 ⇒ p12ファイルをPCやiPhoneなどのデバイスに送ればダブルクリックなどでインストールできます。

■■■ 参考URL ■■■
http://mizushima.ne.jp/Linux/SSL/PrivateCA.php など