LoginSignup
2
2

More than 5 years have passed since last update.

fabric-ca (v1.4.0) が作っている鍵ペア・証明書について (WIP)

Posted at

Status

Work in progress

調査方法

fabric-ca を何も環境変数を指定しないで docker run で起動、できたコンテナの中に入って調べてみる。

調査結果

以下、ホームディレクトリを $FABRIC_CA_HOME として話を進める。
デフォルトではこのディレクトリは /etc/hyperledger/fabric-ca-server になる。

初期キー

まずデフォルトの鍵と証明書 ca-key.pemca-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 フィールドから、前述の秘密鍵に (対応する公開鍵に) 関する証明書であること
  • SubjectIssuer が同じであるし、Subject Key IdentifierAuthority 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 などによるデータ構造なのではないかと思っている。これ以降はソースの調査が必要かと思われる。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2