個人的に一番躓いた"MSP"という概念のコンポーネント。
私個人の理解についてまとめる。
TL;DR
MSPは「この認証局が発行した証明書で、このOU属性の人はHyperledger Fabric上ではこのロールになる。通信ではこの認証局が発行した証明書で公開鍵暗号される。」がまとまったコンポーネントで、チャネル設定のときに使われる。
Local MSPは「この認証局が発行した証明書で、このOU属性の人はHyperledger Fabric上ではこのロールになる。通信ではこの認証局が発行した証明書で公開鍵暗号される。このコンポーネントが使う証明書のペアはこれ。」がまとまったコンポーネントで、Client/Peer/Ordererがチャネルに接続する時に使われる。
MSPとは
公式にはしっかりとページが用意されていて、説明も書いてある。ただ「メンバーシップ操作の抽象化を提供するHyperledger Fabricのコンポーネント」なんて言われてサクっと理解できるわけもない。
Membership Service Providers (MSP) — hyperledger-fabricdocs main ドキュメント
なので、結局何で、どこで使われて、何で構成されているのかに注目してメモを残す。
MSP
認証局が発行する電子証明書をブロックチェーン上のロールと紐づけていおり、"組織"として1つだけ持つことが推奨されている。
構成要素としては以下(単純化のため中間証明書は除外)
- config.yaml
- cacerts
- tlscacerts
cacertsは、「電子証明書を発行する認証局」の認証局自体の証明書になる。
tlscacertsは、「公開鍵暗号をする時に利用される電子証明書を発行する認証局」の認証局自体の証明書になる。
そのうえで、config.yamlには以下の情報を書く。
NodeOUs: Enable: true # 利用したいアイデンティティ分類ごとに、OU識別子を指定します。 # オプションで、特定のCAまたはあなたの組織の中間証明書によってOU識別子が発行されなければならないことを設定できます。 # しかし、特定の証明書を設定しないのが一般的な使い方です。 # 特定の証明書を設定しないことで、すべての証明書を再発行することなく、あとから他のCAまたは中間証明書を追加できます。 # このため、以下のサンプルでは、証明書設定用 (Certificate) フィールドをコメントアウトしています。 ClientOUIdentifier: # Certificate: "cacerts/cacert.pem" OrganizationalUnitIdentifier: "client" AdminOUIdentifier: # Certificate: "cacerts/cacert.pem" OrganizationalUnitIdentifier: "admin" PeerOUIdentifier: # Certificate: "cacerts/cacert.pem" OrganizationalUnitIdentifier: "peer" OrdererOUIdentifier: # Certificate: "cacerts/cacert.pem" OrganizationalUnitIdentifier: "orderer"
ここには、OU属性がXXXXの証明書を持つコンポーネントをXXXXと識別する。という情報が書かれている。
一番上だと「OU属性がClientの証明書を持つコンポーネントはClientと識別する。」になる。
ここまで来て、MSPが何かをまとめると
「この認証局が発行した証明書で、このOU属性の人はHyperledger Fabric上ではこのロールになる。通信ではこの認証局が発行した証明書で公開鍵暗号される。」
の情報がまとまっているコンポーネントになる。
これらは、チャネル設定に持つ情報になる。
Local MSP
Local MSPはMSPとは全く異なる。持っている情報は似ているがClient/Peer/Ordererが使う証明書が梱包されている。
構成要素としては以下(単純化のため中間証明書は除外)
- config.yaml
- cacerts
- tlscacerts
- keystore
- signcerts
MSPにkeystoreとsigncertsを追加したのがLocal MSPになる。MSP + コンポーネントの証明書がLocal MSPという理解で問題ないと思われる。
Local MSPは「この認証局が発行した証明書で、このOU属性の人はHyperledger Fabric上ではこのロールになる。通信ではこの認証局が発行した証明書で公開鍵暗号される。このコンポーネントが使う証明書のペアはこれ。」
の情報がまとまっているコンポーネントになる。
これらは、各コンポーネントが参照するだけで、チャネル設定等には影響しない。