证书说明

FISCO BCOS网络采用面向CA的准入机制,支持任意多级的证书结构,保障信息保密性、认证性、完整性、不可抵赖性。

FISCO BCOS使用x509协议的证书格式,根据现有业务场景,默认采用三级的证书结构,自上而下分别为链证书、机构证书、节点证书。

在多群组架构中,一条链拥有一个链证书及对应的链私钥,链私钥由联盟链委员会共同管理。联盟链委员会可以使用机构的证书请求文件agency.csr,签发机构证书agency.crt

机构私钥由机构管理员持有,可以对机构下属节点签发节点证书。

节点证书是节点身份的凭证,用于与其他持有合法证书的节点间建立SSL连接,并进行加密通讯。

sdk证书是sdk与节点通信的凭证,机构生成sdk证书,允许sdk与节点进行通信。

FISCO BCOS节点运行时的文件后缀介绍如下:

后缀说明
.key私钥文件
.crt证书文件
.csr证书请求文件

使用第三方证书部署节点的说明,可以参考使用CFCA证书部署节点

角色定义

FISCO BCOS的证书结构中,共有四种角色,分别是联盟链委员会管理员、机构、节点和SDK。

联盟链委员会

  • 联盟链委员会管理链的私钥,并根据机构的证书请求文件agency.csr为机构颁发机构证书。
  1. ca.crt 链证书
  2. ca.key 链私钥

FISCO BCOS进行SSL加密通信时,拥有相同链证书ca.crt的节点才可建立连接。

机构

  • 机构管理员管理机构私钥,可以颁发节点证书和sdk证书。
  1. ca.crt 链证书
  2. agency.crt 机构证书
  3. agency.csr 机构证书请求文件
  4. agency.key 机构私钥

节点/SDK

  • FISCO BCOS节点包括节点证书和私钥,用于建立节点间SSL加密连接;
  • SDK包括SDK证书和私钥,用于与区块链节点建立SSL加密连接。
  1. ca.crt #链证书
  2. node.crt #节点证书
  3. node.key #节点私钥
  4. sdk.crt #SDK证书
  5. sdk.key #SDK私钥

节点证书node.crt包括节点证书和机构证书信息,节点与其他节点/SDK通信验证时会用自己的私钥node.key对消息进行签名,并发送自己的node.crt至对方进行验证

证书生成流程

FISCO BCOS的证书生成流程如下,用户也可以使用企业部署工具生成相应证书

生成链证书

  • 联盟链委员会使用openssl命令请求链私钥ca.key,根据ca.key生成链证书ca.crt

生成机构证书

  • 机构使用openssl命令生成机构私钥agency.key
  • 机构使用机构私钥agency.key得到机构证书请求文件agency.csr,发送agency.csr给联盟链委员会
  • 联盟链委员会使用链私钥ca.key,根据得到机构证书请求文件agency.csr生成机构证书agency.crt,并将机构证书agency.crt发送给对应机构

生成节点/SDK证书

  • 节点生成私钥node.key和证书请求文件node.csr,机构管理员使用私钥agency.key和证书请求文件node.csr为节点颁发证书。同理,可用相同的方式为SDK生成证书

节点证书续期操作

完成证书续期前推荐使用证书检测脚本对证书进行检测。

当证书过期时,需要用户使用对当前节点私钥重新签发证书,操作如下:

假设用户证书过期的节点目录为~/mynode,节点目录如下:

  1. mynode
  2. ├── conf
  3. ├── ca.crt
  4. ├── group.1.genesis
  5. ├── group.1.ini
  6. ├── node.crt #节点证书过期,需要替换
  7. ├── node.key #节点私钥,证书续期需要使用
  8. └── node.nodeid
  9. ├── config.ini
  10. ├── scripts
  11. ├── load_new_groups.sh
  12. └── reload_whitelist.sh
  13. ├── start.sh
  14. └── stop.sh

设用户机构证书目录为~/myagency,目录如下:

  1. agency
  2. ├── agency.crt #机构证书,证书续期需要使用
  3. ├── agency.key #机构私钥,证书续期需要使用
  4. ├── agency.srl
  5. ├── ca.crt
  6. └── cert.cnf

续期操作如下:

  • 使用节点私钥生成证书请求文件,请将~/mynode/node/conf/node.key修改为你自己的节点私钥,将~/myagency/cert.cnf替换为自己的证书配置文件
  1. openssl req -new -sha256 -subj "/CN=RenewalNode/O=fisco-bcos/OU=node" -key ~/mynode/node/conf/node.key -config ~/myagency/cert.cnf -out node.csr

操作完成后会在当前目录下生成证书请求文件node.csr

  • 查看证书请求文件
  1. cat node.csr

操作完成后显示如下:

  1. -----BEGIN CERTIFICATE REQUEST-----
  2. MIIBGzCBwgIBADA6MRQwEgYDVQQDDAtSZW5ld2FsTm9kZTETMBEGA1UECgwKZmlz
  3. Y28tYmNvczENMAsGA1UECwwEbm9kZTBWMBAGByqGSM49AgEGBSuBBAAKA0IABICU
  4. KLP9GFRF6bBz+pfHCl1ifqzqrPiVoSPtwubXx+NRAI502EENMpnLqaXWm+OyadKz
  5. PqUneVDQ6U+CvgY2IPygKTAnBgkqhkiG9w0BCQ4xGjAYMAkGA1UdEwQCMAAwCwYD
  6. VR0PBAQDAgXgMAoGCCqGSM49BAMCA0gAMEUCIQDa8PzS1sCdk+rWgEsaOdvBnY+z
  7. NDw6LU44WHCtrW6iNQIgY7Ne4EpAvPGmMOXalJsvYm2Xy6Bm9MlL7NEIP9Y0ai0=
  8. -----END CERTIFICATE REQUEST-----
  • 使用机构私钥和机构证书对证书请求文件node.csr签发新证书,请将~/myagency/agency.key修改为你自己的机构私钥,请将~/myagency/agency.crt修改为你自己的机构证书
  1. openssl x509 -req -days 3650 -sha256 -in node.csr -CAkey ~/myagency/agency.key -CA ~/myagency/agency.crt -out node.crt -CAcreateserial -extensions v3_req -extfile ~/myagency/cert.cnf

成功会有如下显示

  1. Signature ok
  2. subject=/CN=RenewalNode/O=fisco-bcos/OU=node
  3. Getting CA Private Key

操作完成后会在当前目录下生成续期后的证书node.crt

  • 查看节点新证书
  1. cat ./node.crt

操作完成后显示如下:

  1. -----BEGIN CERTIFICATE-----
  2. MIICQDCCASigAwIBAgIJALm++fKF6UmXMA0GCSqGSIb3DQEBCwUAMDcxDzANBgNV
  3. BAMMBmFnZW5jeTETMBEGA1UECgwKZmlzY28tYmNvczEPMA0GA1UECwwGYWdlbmN5
  4. MB4XDTE5MDkyNjEwMjEyNVoXDTI5MDkyMzEwMjEyNVowOjEUMBIGA1UEAwwLUmVu
  5. ZXdhbE5vZGUxEzARBgNVBAoMCmZpc2NvLWJjb3MxDTALBgNVBAsMBG5vZGUwVjAQ
  6. BgcqhkjOPQIBBgUrgQQACgNCAASAlCiz/RhURemwc/qXxwpdYn6s6qz4laEj7cLm
  7. 18fjUQCOdNhBDTKZy6ml1pvjsmnSsz6lJ3lQ0OlPgr4GNiD8oxowGDAJBgNVHRME
  8. AjAAMAsGA1UdDwQEAwIF4DANBgkqhkiG9w0BAQsFAAOCAQEAVvLUYeOJBfr1bbwp
  9. E2H2QTb4phgcFGvrW5tqfvDvKaVGrSjJowZPKX+ruWFRQAZJBCc3/4M0Q1PYlWpB
  10. R5a9Tpc7ebmUVltY7/GqASlDExdt2nqSvLxOKWgE++FveCdJzOEGuuttTZxjWFhQ
  11. Yr9rPlKhzhEo2jM0lFIxdoCrG/WkcKmzJEyHdVwxLr2FOF9q9e9O9xyUkt2QRBGD
  12. T4dIOeLRK6V1pnNkbBNRYG+tGMq2nBUPCAKJbV1LnhaNNRRbE5z7I4JkRnLHea6P
  13. 1VIiwnmbv9a3aM7lsnisPAz8PY5Ddmflo87UiL02J2UnQmq+gtAB9C9DUROGbSH5
  14. Q6CXDA==
  15. -----END CERTIFICATE-----
  • 将机构证书添加到节点证书末尾

由于fisco-bcos使用三级证书结构,需要将机构证书和节点证书合并

  1. cat ~/myagency/agency.crt >> ./node.crt
  • 查看合并后的节点新证书
  1. cat ./node.crt

操作完成后显示如下:

  1. -----BEGIN CERTIFICATE-----
  2. MIICQDCCASigAwIBAgIJALm++fKF6UmXMA0GCSqGSIb3DQEBCwUAMDcxDzANBgNV
  3. BAMMBmFnZW5jeTETMBEGA1UECgwKZmlzY28tYmNvczEPMA0GA1UECwwGYWdlbmN5
  4. MB4XDTE5MDkyNjEwMjEyNVoXDTI5MDkyMzEwMjEyNVowOjEUMBIGA1UEAwwLUmVu
  5. ZXdhbE5vZGUxEzARBgNVBAoMCmZpc2NvLWJjb3MxDTALBgNVBAsMBG5vZGUwVjAQ
  6. BgcqhkjOPQIBBgUrgQQACgNCAASAlCiz/RhURemwc/qXxwpdYn6s6qz4laEj7cLm
  7. 18fjUQCOdNhBDTKZy6ml1pvjsmnSsz6lJ3lQ0OlPgr4GNiD8oxowGDAJBgNVHRME
  8. AjAAMAsGA1UdDwQEAwIF4DANBgkqhkiG9w0BAQsFAAOCAQEAVvLUYeOJBfr1bbwp
  9. E2H2QTb4phgcFGvrW5tqfvDvKaVGrSjJowZPKX+ruWFRQAZJBCc3/4M0Q1PYlWpB
  10. R5a9Tpc7ebmUVltY7/GqASlDExdt2nqSvLxOKWgE++FveCdJzOEGuuttTZxjWFhQ
  11. Yr9rPlKhzhEo2jM0lFIxdoCrG/WkcKmzJEyHdVwxLr2FOF9q9e9O9xyUkt2QRBGD
  12. T4dIOeLRK6V1pnNkbBNRYG+tGMq2nBUPCAKJbV1LnhaNNRRbE5z7I4JkRnLHea6P
  13. 1VIiwnmbv9a3aM7lsnisPAz8PY5Ddmflo87UiL02J2UnQmq+gtAB9C9DUROGbSH5
  14. Q6CXDA==
  15. -----END CERTIFICATE-----
  16. -----BEGIN CERTIFICATE-----
  17. MIIC/zCCAeegAwIBAgIJAKK0/dNnUmlqMA0GCSqGSIb3DQEBCwUAMDUxDjAMBgNV
  18. BAMMBWNoYWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjAe
  19. Fw0xOTA5MjYwOTU4NDFaFw0yOTA5MjMwOTU4NDFaMDcxDzANBgNVBAMMBmFnZW5j
  20. eTETMBEGA1UECgwKZmlzY28tYmNvczEPMA0GA1UECwwGYWdlbmN5MIIBIjANBgkq
  21. hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuPqz154aXw4t+dcRl+aOz3X7yy0PUymm
  22. DqMq3O7OeWXWYa8MWss5GBGWa2SL6puX/uryZJUUYcmSDwAo7Rsrf8zmbiHqouEC
  23. liy01IqM+9jE7/IywRpRZO7W/QNrv9vRXxDJsr120vs760aMRKWD6UCd7bOQ/m/H
  24. N8VC66r3cvcqey1q49idwOnhh5g80921MFlvu30Rire8kzckzUDr/SV3yt036tZs
  25. D+9l/jHRc/tWo38nkiPy3DIm2oOlrNeJ4+IHnXOfxQxOwsiAeFluxtCq/ZFh4pTL
  26. 5lJZTo7bzRcORLOdz40svwDxJKyrMflhue0kGDC0WMExzzvx2oT14wIDAQABoxAw
  27. DjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBlXrFIPQPlKosm2q/O
  28. KktQA04Qh/y6w94Z4bHve0AqzTZn3/tf5q0e9C4f8F/Da+D+nV0GETLtEqRSHT+r
  29. CCAAm78qN9oXmfkt3LvK/YXLNCVB6SSXw8fQx+bfDbIVRB5ivkG1+pmmnh3po1zU
  30. zbrnfdSQi0ZV9MjIPsArjWwkE1i0GkXeiXov305iEX6J5pgu3AMe2RRMwyJiJ6ud
  31. PRPCsF5BN6QrtMubwEnyvyrrX0/drBMtHLMCgecLd/nYMyJ4P15L6UnxC8taQSjM
  32. rAtP3RZrBvBTwXKED0ge/hGIzrO9I1vjfCEuxV3DLlKfGVewuuboW2tYFWGfmrEX
  33. MB7w
  34. -----END CERTIFICATE-----
  • 将生成的节点证书node.crt替换至节点的conf文件夹下
  1. cp -f ./node.crt ~/mynode/node/conf
  • 启动节点
  1. bash ~/mynode/node/start.sh
  • 查看节点共识
  1. tail -f ~/mynode/log/log* | grep +++

正常情况会不停输出++++Generating seal,表示共识正常。

通过上述操作,完成了证书续期的操作。

四类证书续期简易流程

当整条链的证书均已过期时,需要重新对整条链的证书进行续期操作,续期证书的OpenSSL命令与节点续期操作基本相同,或查阅build_chain.sh脚本签发证书的操作,简要步骤如下:

  • 使用链私钥ca.key重新签发链证书ca.crt
  • 使用机构私钥agency.key生成证书请求文件agency.csr
  • 使用链私钥ca.key和链证书ca.crt对证书请求文件agency.csr签发得到机构证书agency.crt
  • 使用节点私钥node.key生成证书请求文件node.csr
  • 使用机构私钥agency.key和机构证书agency.crt对证书请求文件node.csr签发得到节点证书node.crt
  • 将节点证书和机构证书拼接得到node.crt,拼接操作可以参考节点证书续期操作
  • SDK证书sdk.crt签发步骤同节点证书签发
  • 使用新生成的链证书ca.crt,节点证书node.crt替换所有节点conf目录下的证书