2017年11月2日木曜日

Hyperledger Fabric CAのDBの中身をみてみる

Fabric CAは、デフォルトではSqlite3にユーザ情報や証明書情報が格納される。
Sqlite3のテーブルには実際にどんな情報が格納されているかを確認してみる。

①(事前準備)ホストOS側でsqlite3コマンドをインストールする。

# sudo apt-get install sqlite3 libsqlite3-dev

②CAコンテナからホストOSにsqlite3のdbファイルをコピーする

# sudo docker cp ca_peerOrg2:/etc/hyperledger/fabric-ca-server/fabric-ca-server.db  ./fabric-ca-server.db

③sqlite3コマンドでテーブルを参照する。
★「users」、「certificates」、「affiliations」という3つのテーブルが存在している。

# sqlite3 fabric-ca-server.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite>.table
affiliations  certificates  users

➃テーブルのスキーマ情報を参照する。

sqlite> .schema
CREATE TABLE users (id VARCHAR(64), token bytea, type VARCHAR(64), affiliation VARCHAR(64), attributes VARCHAR(256), state INTEGER,  max_enrollments INTEGER);
CREATE TABLE affiliations (name VARCHAR(64) NOT NULL UNIQUE, prekey VARCHAR(64));
CREATE TABLE certificates (id VARCHAR(64), serial_number blob NOT NULL, authority_key_identifier blob NOT NULL, ca_label blob, status blob NOT NULL, reason int, expiry timestamp, revoked_at timestamp, pem blob NOT NULL, PRIMARY KEY(serial_number, authority_key_identifier));


■usersテーブル

id VARCHAR(64):ユーザID
token bytea:パスワード(暗号化されているっぽい)
type VARCHAR(64):ユーザ種別
affiliation VARCHAR(64):アフィリエーション情報
attributes VARCHAR(256):属性情報
state INTEGER:ステータス
max_enrollments INTEGER:最大ENROLLMENT数。デフォルトは-1(無制限)

■affiationsテーブル
name VARCHAR(64):アフィリエーション名
prekey VARCHAR(64):上位階層のアフィリエーション名

■certificatesテーブル
id VARCHAR(64):ユーザID
serial_number blob:証明書シリアル番号
authority_key_identifier blob:認証局鍵識別子(CA公開鍵のハッシュ値)
ca_label blob:CAの名前
status blob:証明書のステータス
reason int:証明書失効の理由
expiry timestamp:証明書有効期限
revoked_at timestamp:証明書失効日時
pem blob:証明書情報(PEM形式)

<実際の値>

■usersテーブル
sqlite> SELECT * FROM users;
admin|$2a$10$C5UFCN0iFS9PnMkhohevYu3uJPc9pGgY9rb1M77ZWM07gOUKnQ8z6|client||[{"name":"hf.Registrar.Roles","value":"client,user,peer,validator,auditor"},{"name":"hf.Registrar.DelegateRoles","value":"client,user,validator,auditor"},{"name":"hf.Revoker","value":"1"},{"name":"hf.IntermediateCA","value":"1"}]|0|-1

■affiationsテーブル
sqlite> SELECT * FROM affiliations;
org2|
org2.department1|org2
org1|
org1.department1|org1
org1.department2|org1

■certificatesテーブル

0 件のコメント: