OpenSSLでプライベート認証局設置と自己証明書作成

OpenSSLでプライベート認証局を作成し、サーバー証明書発行要求に署名する。

久々の作業だったのでせっかくなのでメモ代わりにまとめときます。

OpenSSLのプライベート認証局 設置

スクリプト作成したので参考までに・・・

#!/bin/sh

CATOP=CA設置ディレクトリのパス

CACERT=${CATOP}/cacert.pem
CAKEY=${CATOP}/private/cakey.pem

if [ ! -f ${CATOP}/serial ]; then
    mkdir ${CATOP}
	mkdir ${CATOP}/certs
	mkdir ${CATOP}/crl
	mkdir ${CATOP}/newcerts
	mkdir ${CATOP}/private
	touch ${CATOP}/index.txt
	echo "01" > ${CATOP}/serial

	openssl req \
	    -new -x509 \
	    -keyout ${CAKEY} \
	    -out ${CACERT} \
	    -days 3650
fi

OpenSSLのコンフィグファイルも書き換える必要あり。 設置箇所はOSやディストリビューションによって異なる。

opensslのdir設定をCA設置ディレクトリへ書き換えればOK

openssl.cnf

dir		= CA設置ディレクトリのパス

openssl.cnfをコピペして、毎回それを指定するのでもOKだが、 今回はデフォルト設定ファイルが変更できるので書き換えを行った。

サーバー証明書発行要求作成

これはプライベート認証局でなくても同じ作業、 サーバー証明書発行要求ファイルと秘密鍵ファイルを作成し、 認証局にサーバー証明書発行要求ファイルに署名を行ってもらう。

$ openssl req -new -days 証明書有効日数 -keyout 秘密鍵ファイル名(key.pem) -out サーバー証明書発行要求ファイル名(csr.pem)

証明書有効日数は署名時に切り詰められるので適当に大きな値にしておけば良いw

入力時に聞かれる項目は特にCommon Nameが認証したいサーバーのホスト名であることが重要。 そこだけ気を付ければ後は普通に入力すればよい。

秘密鍵生成時にはパスフレーズの入力が必須だが Apacheの起動ごとにパスフレーズの入力を要求されたりするので、 私はパスフレーズを解除して使っている。 以下、そのコマンド。

$ openssl rsa -in 秘密鍵ファイル名(key.pem) -out 秘密鍵ファイル名(key.pem)

プライベート認証局によるサーバー証明書発行

$ openssl ca -policy policy_anything -in サーバー証明書発行要求ファイル名(csr.pem) -out サーバー証明書ファイル名(csr.pem) -days 3650

プライベート認証局の認証は所詮テスト用等なので、期間は長く取っておく。

-policy policy_anythingについてはプライベート認証局レベルならおまじないと思っておいてよい。