公開日: 2012年8月10日 17:04:30
最終更新: 2012年9月22日 13:37:41

プライベートCA の構築

Apache SSL サイト構築

プライベートCAの構築

Apache で SSL 通信を行うためには、サーバ証明書と、証明書に対応する秘密鍵が必要です。しかし、電子証明書を取得するためには Verisign などの認証機関 (CA) に電子署名をしてもらわなければならず、年間にウン万円単位の費用がかかります。
商用利用するのであれば然るべき機関の「お墨付き」が必要ですが、通信の暗号化やサイトのセキュリティ保護の目的だけですので、今回は自分で自分を証明する(自己署名)、いわゆる “オレオレ証明書”を作成します。

CA ディレクトリの作成

認証局を構築する専用ディレクトリを作成します。ここでは /etc/CA 以下に作成しています。

デフォルトの認証設定を、/usr/local/openssl/openssl.cnf の設定で行っておくと、証明書発行のときにいちいち国名などを入力しなおさなくて済みます。

[ CA_default ]

dir        = /etc/CA           # /etc/CAをCAのホームディレクトリに指定
certs      = $dir/certs        # 証明書を保管する場所
crl_dir    = $dir/crl          # 失効リスト(CRL)を置く場所
database   = $dir/index.txt    # シリアルと発行した証明書のインデックス
#unique_subject    = no    # Set to 'no' to allow creation of
                           # several ctificates with same subject.
new_certs_dir      = $dir/newcerts        # 新しく自分が発行した証明書を置く

certificate    = $dir/ca.crt    # CAの証明書
serial         = $dir/serial    # 次に発行する証明書につけられるシリアル
crlnumber      = $dir/crlnumber # the current crl number
                                # must be commented out to leave a V1 CRL
crl            = $dir/crl.pem           # 自分で失効した証明書のCRL
private_key    = $dir/private/ca.key    # CAの秘密鍵
RANDFILE       = $dir/private/.rand     # デフォルトのランダムファイル
[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = JP        # 日本に変更
countryName_min             = 2
countryName_max             = 2

stateOrProvinceName            = State or Province Name (full name)
stateOrProvinceName_default    = Tokyo  # 東京に変更

CA の秘密鍵作成

乱数ファイルをもとに CA (認証局) の秘密鍵を作成します。乱数ファイルはなんでも良いのですが、メールログやシステムログファイルのような複製を作りにくいもの が 良いでしょう。

鍵の長さは1024bit → 2048bit に拡張します。理由はこの辺りに書いてあります。
これでカレントディレクトリに 「ca.key」 が作成されます。

証明書発行要求 (CSR) の作成

認証局(CA) に証明書を発行してもらうために証明書発行要求(CSR) を作成します。ベリサイン など 公的な認証機関を使う場合には必ず必要となります。対話形式でいくつか質問されますので、必要な項目を入力しましょう。

CA 証明書の作成

正常に「ca.csr」 が作成されたら、「ca.key」(秘密鍵) と「ca.csr」(証明書発行要求) をもとにプライベートCA の電子証明書を作成します。また、有効期間を「-days」 で日数指定します。

CAの証明書は有効期間を少し長めにしておきます。ここでは3650日(10年)を指定しています。
※ 発行要求 (CSR) を作成せずに、次のコマンドで証明書を作成することもできます。

出来上がったCAの証明書 (ca.crt) は配布し、保管用に /etc/CA にも一通置いておきます。CA の秘密鍵 (ca.key) は /etc/CA/private に厳重に保管し第三者に読み取られないようにしましょう。