#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)