- 追加された行はこの色です。
- 削除された行はこの色です。
#navi2(RaspberryPi/証明書,toc,prev,next)
----
#contents
----
* CA証明書作成 [#kc254dff]
* CA証明書作成 [#ba17c02e]
事前に [[RaspberryPi/証明書/環境構築]] を実施してください。
** ルート認証局用 CA証明書作成 [#w8b53465]
** 秘密鍵生成 [#g300a382]
openssl genrsa -sha256 -out private/privkey.pem 2048
*** openssl.cnf ファイル修正 [#q7ba4a26]
openssl.cnf ファイルに次の設定を追加します。
[ cert_rootca ]
subjectKey
|INPUT | - |
|OUTPUT |private/privkey.pem |
ここでは、次の証明書を生成・管理するための基本環境を構築します。
-ルート認証局用 CA証明書
-中間認証局用 CA証明書
-サーバー証明書
-クライアント証明書
オプションの詳細については、下記コマンドで確認ください。
openssl genrsa --help
※少し設定を変更すれば、他の証明書も生成可能です。
** CSR生成 [#ue978134]
openssl req -new -config conf/openssl.cnf \
-key private/privkey.pem \
-days 730 \
-sha256 \
"/C=JP/O=Ehobby/CN=Ehobby Root CA" \
-out request.csr
** Open SSL のインストール [#lb845fe3]
次のコマンドを入力して Open SSL をインストールします。
apt install openssl
|INPUT |private/privkey.pem |
|OUTPUT |request.csr |
** 環境設定 [#c030a3fc]
証明書に関する各種ファイルやディレクトリを作成します。
どこに置いても良いですが、ここでは、 /var/lib/ssl に置くものとします。
+事前準備(証明書を置くディレクトリの作成)
mkdir /var/lib/ssl
cd /var/lib/ssl
+環境設定
# 0. 基本ディレクトリ指定
TARGET_DIR=ca
#
# 1. 必要なディレクトリ作成
mkdir -p ${TARGET_DIR}/{certs,crl,newcerts,private}
#
# 2. 権限を設定
chmod 700 ${TARGET_DIR}/private
#
# 3. 証明書のインデックス管理用ファイルを作成
touch ${TARGET_DIR}/index.txt
#
# 4. 証明書のシリアル番号管理ファイルを作成
echo 01 > ${TARGET_DIR}/serial
#
# 5. 失効リスト番号管理ファイルを作成
echo 00 > ${TARGET_DIR}/crlnumber
オプションの詳細については、下記コマンドで確認ください。
openssl req --help
**openssl.cnf の用意 [#ba04a8bd]
/etc/ssl/openssl.cnf ファイルを /var/lib/ssl/ 配下にコピーし、
次の点を修正します。
+出力先ディレクトリ変更
[ CA_default ]
# <変更> 出力先ディレクトリを変更
#* dir = ./demoCA # Where everything is kept
dir = CA
+署名時のポリシー変更 (必要に応じて)
# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = optional # <変更> match -> optional
organizationName = optional
organizationalUnitName = optional # <変更> match -> optional
commonName = supplied
emailAddress = optional
#
# [備考]
# match : 当該項目がCAと同じであること
# supplied : 当該項目が設定されていること
# optional : 当該項目の設定有無、一致不一致を問わない
+署名用拡張設定
# ルート認証局 CA証明書用
[ cert_rootca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS.1:<ドメイン名>
extendedKeyUsage = serverAuth,clientAuth,emailProtection,codeSigning
crlDistributionPoints = URI:<CRLファイルがあるURL>
authorityInfoAccess = caIssuers;URI:<CA証明書があるURL>
basicConstraints = critical,CA:TRUE
keyUsage = critical,digitalSignature,cRLSign,keyCertSign
** 署名(自己署名) [#zac989fa]
openssl x509 -req -sha -extfile conf/openssl.cnf \
-extensions v3_ca \
-days 730 \
-out cacert.pem \
-in request.csr \
-signkey private/privkey.pem
openssl x509 -inform pem -in cacert.pem \
-outform der -out cacert.crt
----
** 署名拡張用設定詳細 [#f8bfae07]
-subjectKeyIdentifier
サブジェクトキー識別子の指定。hash を指定すること。
(16進数文字列も指定可能ではあるが、非推奨となっている。)
-authorityKeyIdentifier
keyid, issuer を指定可能であり、どちらもオプションの値 always を取ることができる。
keyid が指定された場合、サブジェクトキー識別子を親証明書からコピーしようとする。
issuer は、発行者証明書から発行者とシリアル番号をコピーする。
always は、常にその値をコピーすることを強制する。
例)
keyid:always,issuer
必ず親証明書のサブジェクトキー識別子をコピーし、
可能であれば、発行者証明者から発行者とシリアル番号をコピーする。
-subjectAltName
代替名。次の指定が可能。
email, URI, DNS, RID, IP, dirName, otherName
カンマ区切りで複数指定することも可能。
例)
subjectAltName=email:sample@ehobby.jp,RID:1.2.3.4
DNS名などで複数指定する場合は、次のような方法で可能
方法1)
subjectAltName=@alt_names
[ alt_names ]
DNS.1 = ehobby.jp
DNS.2 = *.ehobby.jp
方法2)
subjectAltName=DNS.1:ehobby.jp,DNS.2:*.ehobby.jp
-extendedKeyUsage
証明書公開鍵を使用できる目的を示す用法のリスト
次のような値を指定可能。
--serverAuth SSL/TLS Webサーバー認証
--clientAuth SSL/TLS Webクライアント認証
--codeSigning コード署名
--emailProtection 電子メール保護(S/MIMEなど)
--timeStamping 信頼できるタイムスタンプ
--msSGC Microsoft Server Gated Crypto
--nsSGC Netscape Server Gated Crypto
--msSmartcardLogin Microsoft Smartcardlogin
|INPUT |private/privkey.pem, request.csr |
|OUTPUT |cacert.pem , cacert.crt |
オプションの詳細については、下記コマンドを確認ください。
openssl x509 --help
設定ファイルの詳細は、man v509v3_config を参照ください。
----
#navi2(RaspberryPi/証明書,toc,prev,next)