#navi2(RaspberryPi,toc,prev,next) ---- #contents ---- * 証明書の生成 [#r3d7f862] ** 証明書の概要 [#e674d494] T.B.D. 概要部分は書きかけです。。。m(__)m *** サーバー証明書 [#pf714c99] +-----------------+ |ルート認証局(CA) | +-----------------+ ↓ルート認証局の秘密鍵を用いて署名 +-----------------+ |中間認証局(CA) | +-----------------+ ↓中間認証局の秘密鍵を用いて署名 +-----------------+ |サーバー証明書 | +-----------------+ Webサーバー Webブラウザ +---------------+ +---------------------------------+ |ルート証明書 | |ルート証明書 (信頼している証明書)| +---------------+ +---------------------------------+ |中間証明書 | +---------------+ |サーバー証明書 | +---------------+ +---------------+ |サーバー秘密鍵 | +---------------+ ** openssl のインストール [#xc54fef7] aptitude install openssl ** ルート証明書(CA)+秘密鍵作成 [#m8aef04c] *** 設定ファイル (openssl_ca.cnf) を修正する [#fc77a400] +ディレクトリ変更 #################################################################### [ 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 +失効リストURL設定 [ 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 +DNS情報設定 [ v3_ca ] ~(省略)~ # <変更> (追加) DNS情報追加 subjectAltName=@alt_names # ディレクティブに注意 !!! # [ v3_ca ] ディレクティブ内の設定はここより上に移動してください。 [ alt_names ] DNS.1 = ehobby.jp DNS.2 = www.ehobby.jp *** 生成する証明書の情報設定 (一時的に環境変数に設定する) [#y504a298] # ------------------------------------------------------- # 設定 # ------------------------------------------------------- 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 を指定する。 ***ルート認証局(CA) の証明書と秘密鍵生成 [#we9c22c5] # ------------------------------------------------------- # 認証局用証明書作成スクリプト # ------------------------------------------------------- # +必要なディレクトリ作成 mkdir -p ${TARGET_DIR}/{certs,crl,newcerts,private} +権限を設定 (private は、作成ユーザーのみ閲覧可能とする) chmod 700 ${TARGET_DIR}/private +証明書のインデクス管理用ファイルを作成する。 touch ${TARGET_DIR}/index.txt +証明書のシリアル番号管理ファイルを作成する。(署名の度にこのファイルに記載されている値が増加する。) echo 01 > ${TARGET_DIR}/serial +設定ファイル有無チェック if [ ! -f ${CNF_FILE} ]; then echo "not found ${CNF_FILE}" exit 1 fi +SUBJ の設定 SUBJ=/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}" +private 配下のファイルの権限を 600 とする。 chmod 600 ${TARGET_DIR}/private/cakey.pem ***証明書の確認 [#bd3c57ae] 次のコマンドで証明書の内容を確認できます。 openssl x509 -text -noout -in RootCA/cacert.pem +pem 形式→der 形式変換 (ブラウザに取り込む場合などに利用) 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にてエンコードした形式 | ** 中間証明書(CA)+秘密鍵作成 [#ufb91ec7] +openssl.conf ファイルをコピーする。 # cd [任意のディレクトリ] # mkdir IntermediateCA # mkdir IntermediateCA/{certs,crl,newcerts,private} # chmod 700 IntermediateCA/private # touch IntermediateCA/index.txt # cp /etc/ssl/openssl.conf ./openssl_intermediateca.cnf +openssl_intermediate.conf の以下を修正 [ CA_default ] #*dir = ./demoCA # Where everything is kept dir = ./IntermediateCA # Where everything is kept certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are keptir ~(省略)~ [ usr_cert ] crlDistributionPoints = URI:<失効リストのURL> +シリアル番号設定 (署名の際のシリアル番号となる) echo 01 > IntermediateCA/serial +ルート認証局(CA) の証明書と秘密鍵生成 $ oepnssl req \ -new \ -sha256 -config ./openssl_intermediateca.cnf \ -out IntermediateCA/cacert_req.pem \ -days <有効期間(日数)> \ -keyout IntermediateCA/private/cakey.pem \ -subj "/C=JP/ST=<都道府県名>/O=<会社名>/OU=<部署名>/CN=<ドメイン名>" Enter PEM pass phrase: <任意のパスフレーズを入力> Verifying - Enter PEM pass phrase: <確認のため、再度パスフレーズを入力> 上記のコマンドにより、次のファイルが生成されます。 |cacert_req.pem |中間認証局(CA)証明書の署名要求ファイル |権限:-rw-r--r-- | |private/cakey.pem |中間認証局(CA)の秘密鍵 |権限:-rw------- | +ルート認証局による署名 ++ルート認証局の cacert_req/ 配下に、cacert_req.pem を <ドメイン名>-cacert_req.pem ファイルとして配置する。 ++ルート認証局のにて以下を実施する。 openssl ca \ -config ./openssl_rootca.cnf \ -policy policy_match \ -extensions v3_ca \ -days <有効期間(日数)> \ -out cacert_req/<ドメイン名>-cacert.pem -infiles cacert_req/<ドメイン名>-cacert_req.pem ++署名の確認 openssl verify -purpose sslclient -CAfile RootCA/cacert.pem \ cacert_req/<ドメイン名>-cacert.pem +署名後のファイルを中間認証局の IntermediateCA 配下に置く。 ---- #navi2(RaspberryPi,toc,prev,next)