ここでは、認証局に必要な秘密鍵とルート証明書を作成します。
つぎのコマンドを実行してopensslをインストールします。
aptitude install openssl
証明書生成のための作業用ディレクトリに、デフォルトの設定ファイル /etc/ssl/openssl.cnf をコピーして次に示すように編集していきます。
[ CA_default ] # <変更> 出力先ディレクトリを変更 #* dir = ./demoCA # Where everything is kept dir = RootCA
# <変更> 署名時のポリシーを変更 # 都道府県名指定なしのルート証明書とするため、 # stateOrProvinceName を optional に変更する。 # # [備考] # match : CAと一緒 # supplied : 当該項目が設定されている # optional : オプション(設定なし, 不一致でも問題ならない) # # For the CA policy [ policy_match ] countryName = match #* stateOrProvinceName = match stateOrProvinceName = optional organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional
[ usr_cert ] ~(省略)~ # <変更> (追加) 失効リストのURLを設定する。 crlDistributionPoints = URL:http://ehobby.jp/ca/latestcrl.crl ~(省略)~ [ v3_ca ] ~(省略)~ # <変更> (追加) 失効リストのURLを設定する。 # ※署名時のオプション -extensions v3_ca 指定により、 # 署名した証明書に失効リストのURL情報が付与あれます。 crlDistributionPoints = URL:http://ehobby.jp/ca/latestcrl.crl
[ v3_ca ] ~(省略)~ # <変更> (追加) DNS情報追加 subjectAltName=@alt_names # ディレクティブに注意 !!! # [ v3_ca ] ディレクティブ内の設定はここより上に移動してください。 [ alt_names ] DNS.1 = ehobby.jp DNS.2 = www.ehobby.jp
# ------------------------------------------------------- # 設定 # ------------------------------------------------------- TARGET_DIR=RootCA # 作成先ディレクトリ IS_ROOTCA=y # ルート認証局の場合 y DAYS=3650 # 有効期間 SUBJ_C=JP # 国 SUBJ_ST= # 都道府県 SUBJ_L= # 市町村 SUBJ_OU= # 部門名 SUBJ_O="Ehobby" # 組織名 SUBJ_CN="Ehobby" # コモンネーム(*1) CNF_FILE=openssl_ca.cnf # 設定ファイル名 # (*1) サーバー証明書の場合は、FQDN を指定する。
mkdir -p ${TARGET_DIR}/{certs,crl,newcerts,private}chmod 700 ${TARGET_DIR}/privatetouch ${TARGET_DIR}/index.txtecho 01 > ${TARGET_DIR}/serialif [ ! -f ${CNF_FILE} ]; then
echo "not found ${CNF_FILE}"
exit 1
fiSUBJ=/C=${SUBJ_C}
# (1) 都道府県情報追加
if [ ! "${SUBJ_ST} = "" ]; then
SUBJ="${SUBJ}/ST=${SUBJ_ST}"
fi
# (2) 市町村情報追加
if [ ! "${SUBJ_L} = "" ]; then
SUBJ="${SUBJ}/L=${SUBJ_L}"
fi
# (3) 部門名情報追加
if [ ! "${SUBJ_OU} = "" ]; then
SUBJ="${SUBJ}/OU=${SUBJ_OU}"
fi
# (4) 組織名情報追加
if [ ! "${SUBJ_O} = "" ]; then
SUBJ="${SUBJ}/O=${SUBJ_O}"
fi
# (5) コモンネーム情報追加
if [ ! "${SUBJ_CN} = "" ]; then
SUBJ="${SUBJ}/CN=${SUBJ_CN}"
fi# (1) オプション調整
# ルート認証局の場合は、証明書を作成する。
# ==> -x509 オプションの付与が必要
# 上位の認証局に署名をもらう場合は、署名要求用ファイルを作成する。
# ==> 出力ファイルに _req を付与する。
X509=
OUT_FILE=cacert.pem
if [ "${IS_ROOTCA}" = "y" ]; then
X509=-x509
OUTFILE=cacert_req.pem
fi
# (2) 証明書生成
# 暗号化方式: sha256 (SHA1の場合は、-newkey rsa:2048 を指定する)
#
openssl req -new \
${X509} \
-sha256 \
-config ./openssl_ca.cnf \
-out ${TARGET_DIR}/${OUT_FILE} \
-days ${DAYS} \
-keyout ${TARGET_DIR}/private/cakey.pem \
-subj "${SUBJ}"chmod 600 ${TARGET_DIR}/private/cakey.pem次のコマンドで証明書の内容を確認できます。
openssl x509 -text -noout -in RootCA/cacert.pem
openssl x509 -inform pem -in RootCA/cacert.pem -outform der -out RootCA/cacert.der
| DER | Distinguished Encoding Rules | ASN.1のエンコード方式の一つ X.509 |
| PEM | Privacy Enhanced Mail | Base64にてエンコードした形式 |