You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ca.md 4.8 kB

4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. ## 证书
  2. `JD Chain`身份认证支持两种模式:`KEYPAIR`(默认)/`CA`,即公私钥对和证书。
  3. 证书模式采用`X.509`标准的数字证书作为用户标识,证书字段中,附加组织和角色等信息。
  4. `JD Chain`使用`jdchain-cli`/`openssl`生成的自签名证书,也支持使用`CFCA`等国家认可的第三方`CA`颁发的外部证书。
  5. `JD Chain` `CA`支持`RSA 2048`/`ECDSA P-256`/`SM2 SM3WithSM2`/`ED25519`四种签名算法。
  6. ### 类别
  7. `JD Chain`证书体系分`ROOT`,`CA`,`PEER`,`GW`,`USER`几个类别。
  8. 使用证书`Subject`中`OU`字段区分。
  9. #### ROOT
  10. 根证书,可用于签发证书及账本初始化时作为账本证书。
  11. #### CA
  12. 中间证书,可用于签发证书及账本初始化时作为账本证书。
  13. #### PEER
  14. 共识节点证书,注册参与方时需要提供`PEER`类型证书。
  15. #### GW
  16. 网关证书,网关所配置公私钥对应账户信息在链上必须存储有`GW`类型的证书。
  17. #### USER
  18. 普通用户证书
  19. ### 实现
  20. `JD Chain`证书使用链上存储方式。主要存储于两个地方:
  21. - 元数据区,存储账本初始化时配置的根证书列表
  22. - 用户账户头部,存储用户注册时提供的证书
  23. > 根证书支持列表,即支持多个参与机构使用不同的证书链,且根证书可使用`ROOT`证书,也可使用`CA`(中间)证书,但节点/网关/用户证书必须由配置在`JD Chain`根证书列表中的证书直接签出。
  24. #### 账本初始化
  25. *`ledger.init`*
  26. 较`KEYPAIR`模式有如下修改:
  27. 1. `identity-mode`
  28. ```properties
  29. identity-mode=CA
  30. ```
  31. `identity-mode`身份认证模式,`KEYPAIR`(默认)/`CA`
  32. 2. `root-ca-path`
  33. ```properties
  34. root-ca-path=/**/ledger1.crt,/**/ledger2.crt
  35. ```
  36. `root-ca-path`根证书列表,使用`ROOT`或者`CA`类型证书,多个根证书使用半角逗号分割。初始化完成后,证书信息会上链存储,通过[2.7 获取账本初始化配置信息](api.md#27-获取账本初始化配置信息)可查。
  37. 3. `cons_parti.*.ca-path`
  38. **CA 模式参与方需要增加配置网关信息,网关节点IP和端口不需要填写**
  39. 节点公钥配置改为证书地址:
  40. ```properties
  41. // KEYPAIR
  42. // cons_parti.0.pubkey-path=
  43. // cons_parti.0.pubkey=
  44. // CA
  45. cons_parti.0.ca-path=/**/peer0.crt
  46. ```
  47. *`local.conf`*
  48. 较`KEYPAIR`模式有如下修改:
  49. ```properties
  50. #当前参与方的公钥,用于非证书模式
  51. # local.parti.pubkey=
  52. #当前参与方的证书信息,用于证书模式
  53. local.parti.ca-path=
  54. #当前参与方的私钥文件,PEM格式,用于证书模式
  55. local.parti.privkey-path=
  56. ```
  57. #### 节点运行
  58. 节点启动和运行时会校验证书类型,时间有效性以及是否由某个根证书签出等,一旦校验失败会阻止网关接入,不再对外服务。
  59. #### 网关接入
  60. *gateway.conf*
  61. ```properties
  62. #默认公钥的内容(Base58编码数据),非CA模式下必填;
  63. keys.default.pubkey=
  64. #默认网关证书路径(X509,PEM),CA模式下必填;
  65. keys.default.ca-path=/home/imuge/jd/nodes/peer0/config/keys/gw1.crt
  66. #默认私钥的路径;在 pk-path 和 pk 之间必须设置其一;
  67. keys.default.privkey-path=/home/imuge/jd/nodes/peer0/config/keys/gw1.key
  68. #默认私钥的内容(加密的Base58编码数据);在 pk-path 和 pk 之间必须设置其一;
  69. keys.default.privkey=
  70. ```
  71. 网关接入网络需要配置`GW`类型证书及对应的私钥信息,证书类型必须是`GW`。
  72. 网关接入时会做如下认证:
  73. - 证书类型包含`GW`
  74. - 根证书列表存在类型正确且有效证书
  75. - 网关证书由根证书列表中某个证书签出(此证书类型正确且有效)
  76. #### 交易认证
  77. 交易时使用证书持有者私钥签名,交易内容不包含签名用户证书信息。
  78. 交易执行前会校验所有账本根证书,签名终端用户和节点用户的证书类型及有效性。
  79. > 请务必在证书到期前更新证书有效期
  80. #### 证书更新
  81. 1. 根证书
  82. `SDK`方式:
  83. ```java
  84. TransactionTemplate txTemp = blockchainService.newTransaction(ledger);
  85. txTemp.metaInfo().ca(X509Utils.resolveCertificate("*.crt"));
  86. ```
  87. 命令行方式:[更新账本根证书](cli/tx.md#更新账本根证书)
  88. 2. 节点/网关/普通用户证书
  89. > 在`JD Chain`中,共识节点,网关配置的接入账户和普通用户本质都是用户账户类型,它们对应的证书管理方式一致。
  90. `SDK`方式:
  91. ```java
  92. txTemp.user("user address").ca(X509Utils.resolveCertificate("*.crt"));
  93. ```
  94. 命令行方式:[更新用户证书](cli/tx.md#更新用户证书)
  95. ### 证书生成
  96. 使用`jdchain-cli`提供的[keys](cli/keys.md)和[ca](cli/ca.md)指令工具创建公私钥对以及签发证书。
  97. 其中[ca-test](cli/ca.md#生成测试证书)可一键生成账本初始化所需的所有证书外加可用的普通用户证书。