안녕하세요?

이번 글에서는 Fabric V1.0 을 기반으로 CA(Certificate Authority) 즉, v0.6 에서는 Membership Service 를 설정하는 방법에 대해서 알아봅니다.

1. Fabric CA 특징

새로운 버전의 Fabric v1.0 에서는 Certificate Authority를 제공하고 있습니다. 이전버전 즉, Fabric v0.6에서는 Membership Service로 존재하던 컴포넌트 입니다.
변화된 대표적인 기능은 다음과 같습니다.

  • 클러스터링 지원 (High Availability>
  • 사용자 정보와 인증서를 보관하기 위한 저장소 선택 가능 (PostgreSQL, MySQL, LDAP)
  • Fabric CA Client, REST API 지원

실제 블록체인을 운영환경에 적용하기 위한 아키텍처를 고려할 때 외부에서 호출해야하는 대상의 컴포넌트가 클러스터링이 불가능한 점에 대해서 가장 힘든점이었습니다.
대표적인 컴포넌트가 Membership Service 였는데 현재 버전부턴 클러스터링을 지원하고 그에 따라 사용자 정보를 저장하기 위한 저장소도 선택가능하니 정말 많은 부분이 개선되었다고 볼 수 있습니다.
변화된 기능에 대해서 아래 그림에서 한 눈에 설명을 하고 있습니다.

2. Fabric CA Server 설정하기

이번 설정에서는 MySQL 을 저장소로 설정하면서 Fabric CA Client로 새로운 유저를 생성해보도록 하겠습니다.
설정 편의성을 고려해서 ubuntu docker image를 기반으로 설정하겠습니다.(Docker의 사용법에 대한 설명은 하지 않겠습니다.)

사전 준비 환경

  • Docker 기반 ubuntu
  • Go 1.7 이상
  • GOPATH 설정
  • libtool, libtdhl-dev, git 패키지 설치

위의 사전 준비 사항이 ubuntu 이미지에 모두 설치가 되었으면 다음의 명령을 통해서 Fabric CA Server를 먼저 설치합니다.

go get -u github.com/hyperledger/fabric-ca/cmd/fabric-ca-server

위의 명령이 정상적으로 진행되었으면 $GOPATH/bin 에 fabric-ca-server 실행파일이 생성됩니다.
실행명령을 통해 fabric ca를 실행하기 전에 다음의 명령어들을 통해서 fabric ca server의 설정파일들이 생성될 위치를 지정합니다.

mkdir $HOME/fabric-ca
export FABRIC_CA_SERVER_HOME=$HOME/fabric-ca

다음으로 fabric-ca-server를 실행합니다. 실행을 할 때 주의할 점은 관리자의 아이디/패스워드 정보를 명령어의 파라미터로 입력합니다.

fabric-ca-server start -b admin:password

위의 명령을 실행하면 앞서 설정한 $FABRIC_CA_SERVER_HOME/server 디렉토리에 “fabric-ca-server-config.yaml” 파일이 생성됩니다.
유저 정보를 Mysql에 저장하기 위해서 설정파일을 열어서 Datasource 설정을 합니다.

datasource: :@tcp(:)/?parseTime=true

Fabric CA Server를 재시작합니다.
(기존에 실행했던 화면에서 Ctrl + C 를 통해 종료하고 다시 실행합니다.)

3. Fabric CA Client 사용하기

Fabric CA Server에 호출하기 위해서는 CLI, SDK, REST API로 가능하며, 이번 글에서 그 시작으로 CLI를 활용하여 유저를 생성하는 방법까지 진행하겠습니다.

Fabric CA Server에서와 같이 ubuntu 이미지에 필요한 사전 준비환경을 설치하고 다음과 같이 Fabric CA Client를 설치합니다.

go get -u github.com/hyperledger/fabric-ca/cmd/fabric-ca-client

설치가 완료되었으면 다음의 명령어로 admin 사용자를 등록합니다.

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client enroll -u http://:7054

그리고, 새로운 사용자를 등록하기 위해서는 다음의 명령어를 통해서 사용자 등록을 합니다.

fabric-ca-client register --id.name user1 --id.secret password --id.type user --id.affiliation org1.department1

위의 명령어에서 affilitation 은 fabric-ca-server 의 설정파일에 명시되어 있는 항목으로 작성하여야 합니다. 아래 그림을 참조바랍니다.

여기까지 간단히 Fabric v1.0 의 CA를 설정하는 방법에 대해서 알아봤습니다.
다음엔 등록된 사용자를 어떻게 사용하는지와 클러스터 설정등에 대해서 알아보도록 하겠습니다.

8 개의 댓글"본격적으로 시작하는 블록체인
  – 03 – 

Fabric CA 사용하기"

  1. ReoDongminLee 4월 05, 2017

    안녕하세요 공무제님. 포스팅 정말 잘 보고 배우고 있습니다.
    본격적으로 시작하는 블록체인 01편에 Node sdk 소스 받아오는 부분 github 브렌치 v1.0-alpha 가 없어져서 올려주신 curl 명령어로 소스를 받아오면 빈 파일들이 형성 됩니다.
    2일 전까지만 해도 문제없이 테스트 했었는데 최근에 바뀐듯 해요. 현재는 master branch만 있어서
    curl -OOOOOO https://raw.githubusercontent.com/hyperledger/fabric-sdk-node/master/examples/balance-transfer/{config.json,deploy.js,helper.js,invoke.js,query.js,package.json}
    이렇게 바꿔 주셔야 할듯 합니다.

    • 공무제 4월 06, 2017

      안녕하세요?
      관심있게 봐주셔서 감사합니다. 말씀해주신 부분은 수정했습니다.
      Fabric이 빠르게 개발되고 있어서 변화되는 부분이 많습니다. 벌써 원문 사이트에는 Getting started 의 내용이 업데이트 되었네요.
      조만간 전반적으로 업데이트 해야겠습니다.

  2. fabric-ca-client register –id.name user1 –id.secret password –id.type user –id.affiliation org1.department1
    이 명령어를 치면, 아래와 같은 에러 메시지가 나옵니다.
    Error: Enrollment information does not exist. Please execute enroll command first. Example: fabric-ca-client enroll -u http://user:userpw@serverAddr:serverPort
    그래서,
    fabric-ca-client enroll -u http://user1:user1@localhost:7054
    을 하면,
    Error: Error response from server was: Authorization failure 가 뜹니다..
    약간의 테스트를 해보았는데요, $HOME/fabric-ca/fabric-ca-server-config.yaml의 identities에서 사용자를 직접 추가시켜줘야 enrollment가 되는 것 같습니다. config 파일 수정하지 않고 커맨드라인으로 동적으로 일반 client를 추가하는 방법은 없을까요?… 적어주신 방법은 (아마) 버전 차이 때문에 안 되는 것 같습니다.

  3. fabric 0.6 간신히 배워 놓았는데, 1.0 에서도 많은 변화게 있네요 TT
    처음 배우시는 분들은 docker 에 어느정도 익숙해지시면, 큰 무리 없을 듯 합니다.

  4. 추가적으로 질문 사항이 있습니다.
    강좌에서
    “개발된 체인코드는 실행중인 Validating Peer 컨테이너로 복사를 해서 deploy를 해야합니다”
    이 부분을 구체적으로 어떻게 하는지 설명을 추가해 주시면 안될까요?
    다른 부분은 다 되는데, 이 부분만 안되어서 query 가 안되고 있습니다. ~~;:

  5. enrollID 할때, membersrvc.yaml 가 아닌 core.yaml 에 있는 vp 나 user 값을 사용하면 query 가 제대로 되네요.

  6. Error endorsing chaincode: rpc error: code = 2 desc = Illegal file mode detected for file src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/chaincode_example02.go: 100755

    현재 1.0 알파 버전에 이런 에러가 있어서 그런지, chaincode 설ㅅ부분에서 위와 같은 에러 나옵니다. 4월 17일 버전 부터 수정했다고 하는데, 현재 스타트 버전엔 반영 안되어있습니다. 건강시 안전화 된 이후나 해보시는 게 좋을 듯 합니다. TT 아님 블록체인 네트워크 환경은 ibm 클라우드를 쓰시는 게 좋은듯.

  7. ㄴㅇㄴㅇ 10월 08, 2017

    bluemix 가입하고 블록체인 서비스 실행할 때
    pricing plan에서 free가 없고 enterprise member plan (유료 월 1000달러) 밖에 안뜨는데 왜 그럴까요?ㅠ

토론 참가

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.