- 追加された行はこの色です。
- 削除された行はこの色です。
#navi2(RaspberryPi,toc,prev,next)
----
#contents
----
* 証明書の生成 [#r3d7f862]
** 証明書の概要 [#e674d494]
T.B.D. 概要部分は書きかけです。。。m(__)m
*** サーバー証明書 [#pf714c99]
+-----------------+
|ルート認証局(CA) |
+-----------------+
↓ルート認証局の秘密鍵を用いて署名
+-----------------+
|中間認証局(CA) |
+-----------------+
↓中間認証局の秘密鍵を用いて署名
+-----------------+
|サーバー証明書 |
+-----------------+
Webサーバー Webブラウザ
+---------------+ +---------------------------------+
|ルート証明書 | |ルート証明書 (信頼している証明書)|
+---------------+ +---------------------------------+
|中間証明書 |
+---------------+
|サーバー証明書 |
+---------------+
+---------------+
|サーバー秘密鍵 |
+---------------+
** openssl のインストール [#xc54fef7]
aptitude install openssl
** ルート証明書(CA)+秘密鍵作成 [#ufb91ec7]
+openssl.conf ファイルをコピーする。
$ cd [任意のディレクトリ]
$ mkdir RootCA
$ mkdir RootCA/{certs,crl,newcerts,private}
$ chmod 700 RootCA/private
$ touch RootCA/index.txt
$ cp /etc/ssl/openssl.conf ./openssl_rootca.cnf
+openssl_rootca.conf の以下を修正
** ルート証明書(CA)+秘密鍵作成 [#m8aef04c]
*** 設定ファイル (openssl_ca.cnf) を修正する [#fc77a400]
+ディレクトリ変更
####################################################################
[ CA_default ]
#*dir = ./demoCA # Where everything is kept
dir = ./RootCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are keptir
# <変更> 出力先ディレクトリを変更
#* 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 ]
~(省略)~
[ policy_match ]
# 署名のポリシー (-policy policy_match にて指定)
# match : CAと一致
# supplied : 記述が必須
# optiona : オプション
# <変更> (追加) 失効リストのURLを設定する。
crlDistributionPoints = URL:http://ehobby.jp/ca/latestcrl.crl
~(省略)~
[ usr_cert ]
crlDistributionPoints = URI:<失効リストのURL>
[ v3_ca ]
~(省略)~
# <変更> (追加) 失効リストのURLを設定する。
# ※署名時のオプション -extensions v3_ca 指定により、
# 署名した証明書に失効リストのURL情報が付与あれます。
crlDistributionPoints = URL:http://ehobby.jp/ca/latestcrl.crl
+DNS情報設定
[ v3_ca ]
~(省略)~
# 署名時に -extensions v3_ca を指定することで、
# ここに記載の失効リストのURL情報が付与される。
crlDistributionPoints = URI:<失効リストのURL>
~(省略)~
# サブジェクト代替名の設定
# <変更> (追加) DNS情報追加
subjectAltName=@alt_names
# ディレクティブに注意 !!!
# [ v3_ca ] ディレクティブ内の設定はここより上に移動してください。
[ alt_names ]
# ドメイン名リストを追加していく。
DNS.1 = <ドメイン名(例:ehobby.jp)>
DNS.2 = <ドメイン名(例:www.ehobby.jp や, *.ehobby.jp など)>
DNS.1 = ehobby.jp
DNS.2 = www.ehobby.jp
+シリアル番号設定 (署名の際のシリアル番号となる)
echo 01 > RootCA/serial
+ルート認証局(CA) の証明書と秘密鍵生成
$ oepnssl req \
-new \
-x509 \
-sha256 \
-config ./openssl_rootca.cnf \
-out RootCA/cacert.pem \
-days <有効期間(日数)> \
-keyout RootCA/private/cakey.pem \
-subj "/C=JP/ST=<都道府県名>/O=<会社名>/OU=<部署名>/CN=<ドメイン名>"
Enter PEM pass phrase: <任意のパスフレーズを入力>
Verifying - Enter PEM pass phrase: <確認のため、再度パスフレーズを入力>
上記のコマンドにより、次のファイルが生成されます。
※権限が異なる場合は、chmod で修正してください。
|cacert.pem |ルート認証局(CA)証明書 |権限:-rw-r--r-- (644)|
|private/cakey.pem |ルート認証局(CA)の秘密鍵 |権限:-rw------- (600)|
+証明書の確認
*** 生成する証明書の情報設定 (一時的に環境変数に設定する) [#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)