rootCA
あらかじめブラウザやOSに組み込まれていることが多いX.509 認証局の証明書と同じ形の証明書を自己署名な認証局用に作ってみる RFC 5280 Certificate 証明書の基本構成ができているのでrootで必要なsibjectの構成と、Extensionsなどを組み合わせてみる subject は Name 型から辿ると RDNSequence という LDAP系の名前らしい形をしている 認証局CA
Webなどサーバ用
メールアドレス等個人用
の3種類ぐらいで分けられるか?
共通して、属性っぽいところから、国、組織ぐらいを載せる
openssl req -new -newkey rsa:2048 -keyout rsa.key -passout pass:demo -out rsa.csr -subj "/C=JP/O=SiisiseNet/CN=Siisise Demo Root 1"
C country 国 JP
O organization 組織 SiisiseNet
(ST 都道府県や州 L 市区町村 略)
CN common name Siisise Demo Root 1
ぐらいにしてみる
RSAの場合は4096bitくらいあるといい -newkey rsa:4096
ECDSA 256bit 384bit 521bit の内利用する長そうなもの? -newkey ec -pkeyout ec_paramgen_curve prime256v1
prime256v1
EdDSAはTLSには向かない -newkey ed25519 または ed448
CNがひつよう?
属性
RFC 5280 の 4.2 証明書の拡張
rootCAに必要なもの
id-ce-subjectKeyIdentifier サブジェクト鍵識別子 OID 2.5.29.14
critical false
hashなど
code:subjectKeyIdentifier
SubjectKeyIdentifier ::= KeyIdentifier
KeyIdentifier ::= OCTET STRING
id-ce-keyUsage 鍵用途 OID 2.5.29.15
critical true
必要フラグ
keyCertSign 証明書の署名
basicConstraints の cA がひつよう
cRLSign 証明書失効リストの署名
code:keyUsage
KeyUsage ::= BIT STRING {
digitalSignature (0),
nonRepudiation (1), -- 最近の X.509 版では、このビットは
-- contentCommitment に名称変更されています
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5),
cRLSign (6),
encipherOnly (7),
decipherOnly (8) }
keyUsage
digitalSignature CA以外の署名など
nonRepudiation 否認防止
keyEncipherment 鍵暗号化(RSAで共通鍵の交換など ECDSAでは禁止)
dataEncipherment データを直接暗号化する鍵(ほとんどつかわない ECDSAでは禁止)
keyAgreement 鍵交換(TLSの主流 CAには不要)
keyCertSign 証明書の署名
cRLSign 無効化リストの署名
encipherOnly 鍵を暗号化のみに利用する (keyAgreementなどのサブフラグ)
deciperOnly 鍵を復号のみに利用する (keyAgreementなどのサブフラグ)
id-ce-basicConstraints 基本制約 OID 2.5.29.19
critical true
code:basicConstraints
BasicConstraints ::= SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
cA = true のとき subjectKeyIdentifier が必要
とりあえずこの3つが必要
code:v3_ca
basicConstraints = critical, CA:true
keyUsage = critical, cRLSign, keyCertSign
subjectKeyIdentifier = hash