#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)
トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS