Status
Work in progress
調査方法
fabric-ca
を何も環境変数を指定しないで docker run
で起動、できたコンテナの中に入って調べてみる。
調査結果
以下、ホームディレクトリを $FABRIC_CA_HOME
として話を進める。
デフォルトではこのディレクトリは /etc/hyperledger/fabric-ca-server
になる。
初期キー
まずデフォルトの鍵と証明書 ca-key.pem
と ca-cert.pem
が存在する。
実運用ではデフォルトを使わず、新たに生成したものを指定するべきである。
root@99208378ae24:/etc/hyperledger/fabric-ca-server# openssl ec -text -noout < ca-key.pem
read EC key
Private-Key: (256 bit)
priv:
00:db:39:5e:8a:59:54:11:16:4e:c5:02:08:5f:26:
53:81:f5:e3:f5:0d:d5:a9:68:fa:3e:41:cc:14:19:
d0:f2:ad
pub:
04:a2:07:e5:bd:89:69:29:aa:89:05:c7:ca:a0:be:
72:69:27:20:27:05:8b:90:1d:75:58:ec:42:2c:c3:
57:ab:99:e2:fe:ac:f8:f5:a2:27:2c:df:03:fa:d3:
b4:cb:d8:00:fa:bf:c9:e1:07:a4:15:01:d6:3d:39:
de:6c:67:a4:cb
ASN1 OID: prime256v1
NIST CURVE: P-256
root@99208378ae24:/etc/hyperledger/fabric-ca-server# openssl x509 -text -noout < ca-cert.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
07:70:93:0c:e5:38:ee:c5:02:e4:ae:24:9f:f0:9a:aa:78:75:d7:86
Signature Algorithm: ecdsa-with-SHA256
Issuer: C=US, ST=California, L=San Francisco, O=Internet Widgets, Inc., OU=WWW, CN=example.com
Validity
Not Before: Oct 12 19:31:00 2016 GMT
Not After : Oct 11 19:31:00 2021 GMT
Subject: C=US, ST=California, L=San Francisco, O=Internet Widgets, Inc., OU=WWW, CN=example.com
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:a2:07:e5:bd:89:69:29:aa:89:05:c7:ca:a0:be:
72:69:27:20:27:05:8b:90:1d:75:58:ec:42:2c:c3:
57:ab:99:e2:fe:ac:f8:f5:a2:27:2c:df:03:fa:d3:
b4:cb:d8:00:fa:bf:c9:e1:07:a4:15:01:d6:3d:39:
de:6c:67:a4:cb
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Subject Key Identifier:
17:67:42:3D:AA:9E:82:3F:C4:C5:1D:9F:5B:C3:99:D1:B5:9C:48:10
X509v3 Authority Key Identifier:
keyid:17:67:42:3D:AA:9E:82:3F:C4:C5:1D:9F:5B:C3:99:D1:B5:9C:48:10
Signature Algorithm: ecdsa-with-SHA256
30:44:02:20:07:a7:94:5b:a7:d1:26:d4:6f:d4:98:a9:fc:5a:
c0:9b:a8:37:d6:79:c5:5b:64:f4:23:dd:12:b8:a0:6e:64:41:
02:20:40:07:b8:38:e2:98:84:97:61:dd:fe:d4:45:a2:9f:19:
37:f8:f7:6f:e7:99:19:ad:2b:ec:92:2a:3a:47:4a:b5
次のことがわかる:
-
pub
フィールドから、前述の秘密鍵に (対応する公開鍵に) 関する証明書であること -
Subject
とIssuer
が同じであるし、Subject Key Identifier
とAuthority Key Identifier
が同じであることから、オレオレ証明書であること
Issuer{Public,Secret}Key
データベース (デフォルトでは sqlite3
) をセットアップしたのち、CAは Issuer の鍵ペアなるものを作成する
/etc/hyperledger/fabric-ca-server/IssuerPublicKey
/etc/hyperledger/fabric-ca-server/msp/keystore/IssuerSecretKey
秘密鍵らしきものは msp
の下で管理されている。サーバにHSMがある場合はそこに格納されるのだと思う。
どちらも謎のバイナリだった。特に、PublicKeyのほうは EnrollmentID
らしき文字列が見えるので、Fabricが作成した、protobuf などによるデータ構造なのではないかと思っている。これ以降はソースの調査が必要かと思われる。