- 追加された行はこの色です。
- 削除された行はこの色です。
#navi2(RaspberryPi/証明書,toc,prev,next)
----
#contents
----
* 認証局(CA)構築 [#jc473f2a]
ここでは、認証局に必要な秘密鍵とルート証明書を作成します。
** openssl のインストール [#h5bd7597]
つぎのコマンドを実行してopensslをインストールします。
aptitude install openssl
** 設定ファイル (openssl_ca.cnf) 作成 [#c8b7b3f3]
認証局(CA)作成のための設定ファイルを作成します。
/etc/ssl/openssl.cnf ファイルをベースに作成します。
以下、任意の作業ディレクトリで実行してください。
mkdir ssl
cp /etc/ssl/openssl.cnf ssl/openssl_ca.cnf
※Red Hat 系の場合は、/etc/pki/tls/openssl.cnf になります。
openssl_ca.cnf の次の点を修正します。
+出力先ディレクトリ変更
[ CA_default ]
# <変更> 出力先ディレクトリを変更
#* dir = ./demoCA # Where everything is kept
dir = CA
+署名時のポリシー変更
# <変更> 署名時のポリシーを変更
# 署名する証明書との一致/不一致条件を設定する。
# match : CAと一緒
# supplied : 当該項目が設定されている
# optional : オプション(設定なし, 不一致でも問題ならない)
# ※署名時 -policy policy_match で本ポリシーが適用される。
#
# [備考]
#
# For the CA policy
[ policy_match ]
countryName = match
#* stateOrProvinceName = match
stateOrProvinceName = optional
#* organizationName = match
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
+失効リストURL設定
[ v3_ca ]
~(省略)~
# <追加> 失効リストのURLを設定する。
# ※署名時のオプション -extensions v3_ca 指定により、
# 署名した証明書に失効リストのURI情報が付与されます。
crlDistributionPoints = URI:http://ehobby.jp/ca/latestcrl.crl
+DNS情報設定
[ v3_ca ]
~(省略)~
# <追加> DNS情報追加
subjectAltName=@alt_names
# ディレクティブに注意 !!!
# [ v3_ca ] ディレクティブ内の設定はここより上に移動してください。
[ alt_names ]
DNS.1 = ehobby.jp
DNS.2 = *.ehobby.jp
** 生成する証明書の情報設定 (一時的に環境変数に設定する) [#y504a298]
# -------------------------------------------------------
# 設定
# -------------------------------------------------------
CNF_FILE=openssl_ca.cnf # 設定ファイル名
TARGET_DIR=CA # 作成先ディレクトリ
IS_ROOTCA=y # ルート認証局の場合 y
DAYS=3650 # 有効期間
# SUBJの設定
# 次の値を指定可能
# /C=[国]
# /ST=[都道府県]
# /L=[市町村]
# /O=[組織]
# /OU=[部門]
# /CN=[コモンネーム(サーバ証明書の場合 FQDN を指定する)]
# (*1) サーバー証明書の場合は、FQDN を指定する。
SUBJ="/C=JP/O=Ehobby/OU=Server CA/CN=Ehobby"
***ルート認証局(CA) の証明書と秘密鍵生成 [#we9c22c5]
以下のスクリプトを実行します。
#
# 1. 必要なディレクトリ作成
mkdir -p ${TARGET_DIR}/{certs,crl,newcerts,private}
#
# 2. 権限を設定 (private は、作成ユーザーのみ閲覧可能とする)
chmod 700 ${TARGET_DIR}/private
#
# 3. 証明書のインデクス管理用ファイルを作成する。
touch ${TARGET_DIR}/index.txt
#
# 4. 証明書のシリアル番号管理ファイルを作成する。
# (署名の度にこのファイルに記載されている値が増加する。)
echo 01 > ${TARGET_DIR}/serial
#
# 5. 設定ファイル有無チェック
if [ ! -f ${CNF_FILE} ]; then
echo "not found ${CNF_FILE}"
exit 1
fi
#
# 6. 証明書生成オプション設定
# ルート認証局の場合 → -x509 オプションを付与
# 中間認証局の場合 → 上位認証局に署名をもらう。
# 分かりやすいようにファイル名に _req を付けておく。
X509=-x509
OUT_FILE=cacert.pem
if [ ! "${IS_ROOTCA}" = "y" ]; then
X509=
OUT_FILE=cacert_req.pem
fi
#
# 7. 証明書生成
# 暗号化方式は sha256 を使用する。
# メリットはあまりないが、SHA1を使用する場合は、
# -sha256 の代わりに -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}"
# 次のようにパスフレーズの入力が求められるので
# パスフレーズを入力する(2回)
# Enter PEM pass phrase:
# Verifying - Enter PEM pass phrase:
#
# 8. private 配下のファイルの権限を 600 とする。
chmod 600 ${TARGET_DIR}/private/cakey.pem
#
# 9. 証明書の確認
if [ "${IS_ROOTCA}" = "y" ]; then
openssl x509 -text -noout -in ${TARGET_DIR}/cacert.pem
fi
#
# 10. der 形式ファイルを生成する(ブラウザに取り込む場合の形式)
if [ "${IS_ROOTCA}" = "y" ]; then
openssl x509 -inform pem -in ${TARGET_DIR}/cacert.pem -outform der -out
${TARGET_DIR}/cacert.der
fi
備考
No.9, 10 は証明書が完成した際に確認する。
中間認証局用の場合は、署名が未だのため確認できない。
|PEM |Privacy Enhanced Mail |Base64にてエンコードした形式 |
|DER |Distinguished Encoding Rules |ASN.1のエンコード方式の一つ X.509 |
----
#navi2(RaspberryPi/証明書,toc,prev,next)