# CA璇佷功鏈嶅姟浣跨敤璇﹁В

CA璇佷功鏈嶅姟璁捐閾炬帴锛歔CA璇佷功鏈嶅姟璁捐](../tech/CA璇佷功鏈嶅姟.md)

## 鍔熻兘浠嬬粛

1. 鏍规嵁鎻愪緵鐨勪俊鎭敓鎴愬叕绉侀挜鍜岀鍙戝崟涓瘉涔︼紝骞朵繚瀛樿瘉涔﹀拰瀵嗛挜锛坮oot瀵嗛挜涓嶄綔淇濆瓨锛屽彧鐢熸垚鏂囦欢锛夈€�

2. 閫氳繃CSR鏂囦欢绛惧彂鍗曚釜璇佷功锛屽苟淇濆瓨璇佷功銆�

3. 鍙互寤舵湡鏌愪釜鍏蜂綋璇佷功鐨勬湁鏁堟湡銆�

4. 鍙互閫氳繃璇佷功閾句笂鐨凜A璇佷功鎾ら攢鏌愪釜璇佷功銆�

5. 鑳藉鐢熸垚CA璇佷功鐨勬渶鏂扮殑鎾ら攢鍒楄〃鏂囦欢锛圕RL鏂囦欢锛夈€�

6. root璇佷功鍙互閫夋嫨閰嶇疆鎴栬€呰嚜绛剧敓鎴愩€�

7. 鍙互閰嶇疆涓嶅悓鐨勫惎鍔ㄦ柟寮忥紝鐢ㄦ潵鍖哄垎tls鍜宻ign璇佷功鐨勭鍙戙€�

8. 鍙互绛惧彂鍗曠嫭浣跨敤鐨則ls鍔犲瘑鎴栬€呯鍚嶈瘉涔︼紙鍥藉瘑鏍囧噯锛宼ls鍙岃瘉涔︼級銆�

9. 鍙互閰嶇疆涓棿璇佷功鍚姩锛屼繚鎶oot璇佷功銆�

10. 鎻愪緵寮€鍚瘑閽ユ枃浠跺姞瀵嗗姛鑳姐€�

    

<span id="deploy"></span>

## 瀹夎閮ㄧ讲

### 鐜渚濊禆

* golang
  * 鐗堟湰涓�1.16鎴栦互涓�
  * 涓嬭浇鍦板潃锛歨ttps://golang.org/dl/

### 浠g爜涓嬭浇

```sh
$ git clone  --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-ca.git
```

### 杩愯鍚姩

#### 淇敼mysql鏁版嵁搴撹繛鎺ラ厤缃�

```shell
$ cd src/conf/

$ vi config.yaml  # 閰嶇疆mysql鏁版嵁搴擄紝鎵撳紑config.yaml锛屼慨鏀筪b_config
```

#### 閮ㄧ讲鍚姩

- 鏂瑰紡涓€锛�

  **鍑嗗骞跺惎鍔╩ysql鏁版嵁搴�**

  mysql

  * 鐗堟湰8.0鍙婁互涓�
  * 涓嬭浇鍦板潃锛歨ttps://dev.mysql.com/downloads/installer/

  

  **缂栬瘧chainmaker-ca绋嬪簭**

  ```shell
  $ cd src/
  $ go build -o chainmaker-ca
  ```

  

  **鍚姩绋嬪簭**

  ```shell
  $ cd src/
  $ ./chainmaker-ca -config ./conf/config.yaml
  ```

  

- 鏂瑰紡浜岋細

  **鍑嗗docker鍩虹闀滃儚**

  mysql: 8.0, golang:1.16.2, centos:7.6.1810

  

  **鍚姩docker瀹瑰櫒鑴氭湰**

  ```shel
  $ sh deploy.sh
  ```

  

## 閰嶇疆鏂囦欢璇﹁В

鐩綍锛歚``src/conf/config.yaml```

閰嶇疆鏂囦欢涓昏鏄互涓嬪嚑閮ㄥ垎鏋勬垚锛�

### base config

CA鏈嶅姟鐨勫熀纭€閰嶇疆

```yaml
# Base config
base_config:
  server_port: 8090                     #鏈嶅姟绔彛
  ca_type: single_root                  #鍚姩妯″紡锛歞ouble_root/single_root/tls/sign
  expire_year: 2                        #绛惧彂鏈夋晥骞撮檺
  expire_month: 6                       #绛惧彂鏈夋晥鏈堜唤锛堜紭鍏堢骇楂樹簬骞撮檺锛�
  hash_type: SHA256                     #浣跨敤鍝堝笇绫诲瀷锛歋HA256/SHA3_256/SM3
  key_type: ECC_NISTP256                #浣跨敤瀵嗛挜绫诲瀷锛欵CC_NISTP256/SM2/RSA2048
  can_issue_ca: true                    #鏄惁鑳界户缁鍙慍A璇佷功          
  provide_service_for: [org1,org2]      #鎻愪緵鏈嶅姟鐨勭粍缁囧垪琛�(鑻ヤ笉閰嶇疆锛屽垯涓嶉檺鍒剁粍缁�)   
  key_encrypt: false                    #瀵嗛挜鏄惁鍔犲瘑 
  access_control: true                  #鏄惁寮€鍚闂帶鍒�
  default_domain: chainmaker.org        #璇佷功閲岀殑鍩熷悕(濡傛灉涓嶅紑鍚厤缃紝鍒欎笉浼氬~鍐�)
```

***娉�**

* SM2鍜孲M3蹇呴』瑕佹惌閰嶄娇鐢�



* **ca_type:**

  CA鍚姩妯″紡锛屽彲浠ュ皢tls鍜宻ign璇佷功绛惧彂鏈嶅姟鍒嗙閮ㄧ讲銆�

  - tls锛岃鏈嶅姟鍙彁渚涗负tls璇佷功鐨勭鍙戞湇鍔°€�

  - sign锛岃鏈嶅姟鍙彁渚泂ign璇佷功鐨勭鍙戞湇鍔°€�

  - single_root锛屽彲浠ヤ负tls鍜宻ign璇佷功鍚屾椂鎻愪緵绛惧彂鏈嶅姟锛屼娇鐢ㄤ竴涓猺oot CA璇佷功銆�

  - double_root锛屽彲浠ヤ负tls鍜宻ign璇佷功鍚屾椂鎻愪緵绛惧彂鏈嶅姟锛屼娇鐢ㄤ袱涓猺oot CA璇佷功銆�

* **can_issue_ca:**

  鍦ㄦ墍鎻愪緵鏈嶅姟鐨勭粍缁囧唴锛屾槸鍚﹁兘澶熺鍙戜腑闂碈A璇佷功銆�

* **provide_service_for:**

  瀵瑰垪琛ㄤ腑鐨勭粍缁囨彁渚涚鍙戞湇鍔°€傚彲浠ヤ粎閰嶇疆涓€涓粍缁囷紝鍙负鍗曚釜鎻愪緵鏈嶅姟銆備篃鍙互閰嶇疆澶氫釜锛屽悜澶氫釜缁勭粐鎻愪緵绛惧彂鏈嶅姟銆傚鏋滀笉閰嶇疆锛屽垯涓轰换浣曠粍缁囨湇鍔°€�

* **key_encrypt:**

  鎻愪緵瀵嗛挜鏂囦欢鍔犲瘑鐨勫紑鍏炽€傚鏋滃紑鍚紝瀵嗛挜浼氶噰鐢≒EMCipherAES256鍔犲瘑鏂瑰紡锛屽姞瀵嗗瘑閽ユ枃浠躲€傦紙root瀵嗛挜涓嶅瓨鍌紝涔熶笉鍔犲瘑锛�

* **access_control:**

  璁块棶鎺у埗寮€鍏筹紝濡傛灉寮€鍚紝璁块棶灏嗘湇鍔$殑鎵€鏈夋帴鍙i渶瑕佹惡甯oken璁块棶銆�

### root config

root 璇佷功鐨勮矾寰勫拰CSR閰嶇疆

```yaml
# Root CA config
root_config:
  cert:
    -
      cert_type: tls                                             #root璇佷功鐨勭被鍨嬶細tls/sign
      cert_path: ../crypto-config/rootCA/tls/root-tls.crt        #璇佷功鐨勮矾寰�     
      private_key_path: ../crypto-config/rootCA/tls/root-tls.key #瀵嗛挜鐨勮矾寰�  
      key_id: SM2TlsKey261                                      #瀵嗙爜鏈簆kcs11 key id
    -
      cert_type: sign
      cert_path: ../crypto-config/rootCA/sign/root-sign.crt               
      private_key_path: ../crypto-config/rootCA/sign/root-sign.key
      key_id: SM2SignKey262
  csr:
    CN: root.org-wx                                              #璇佷功鐨勪俊鎭殑CN瀛楁
    O: org-wx                                                    #璇佷功鐨勪俊鎭殑O瀛楁
    OU: root                                                     #璇佷功鐨勪俊鎭殑OU瀛楁
    country: CN                                                  #璇佷功鐨勪俊鎭殑country瀛楁
    locality: Beijing                                            #璇佷功鐨勪俊鎭殑locality瀛楁
    province: Beijing                                            #璇佷功鐨勪俊鎭殑province瀛楁
```

* **cert_type:**

  璇佷功鐨勮矾寰勭被鍨嬶紝濡傛灉CA鐨勫惎鍔ㄦ柟寮忔槸double_root锛岄渶瑕佸悓鏃堕厤缃畉ls鍜宻ign涓ょ绫诲瀷鐨勮瘉涔﹁矾寰勩€傚鏋淐A鍚姩鏂瑰紡鏄痵ingle_root锛岄渶瑕侀厤缃畇ign绫诲瀷鐨勮瘉涔﹁矾寰勩€�

* **csr锛堥€夊~锛�:**

  * 涓嶅~锛氳鍙朿ert鐩綍涓嬬殑root璇佷功鍚姩鏈嶅姟銆�

  * 濉啓锛氫互CSR閰嶇疆鑷root璇佷功鍚姩鏈嶅姟銆�

  鍏朵腑锛孫U瀛楁闇€瑕佺鍚坈hainmaker鐨勮瘉涔︽牎楠岃鑼冿紝鍚﹀垯閾句笂浼氭牎楠屽け璐ャ€傞渶瑕佸~鍐檙oot銆�

### intermediate_config

**鍙€夐厤缃�**

涓棿CA鐨勭敓鎴愰厤缃�

```yaml
# intermediate config
intermediate_config:                 
  -
    csr:
      CN: ca.org1
      O: org1
      OU: ca
      country: CN
      locality: Beijing
      province: Beijing
    key_id: SM2TlsKey261
  -
    csr:
      CN: ca.org2
      O: org2
      OU: ca
      country: CN
      locality: Beijing
      province: Beijing
    key_id: SM2TlsKey262
```

### access_control_config

**鍙€夐厤缃�**

璁块棶鎺у埗璐﹀彿閰嶇疆

```yaml
access_control_config:
  -
    app_role: admin            #瑙掕壊
    app_id: admin              #璐︽埛ID
    app_key: passw0rd          #璐︽埛鍙d护
  - 
    app_role: user
    app_id: user1
    app_key: passw0rd
```

* **app_role**  
  * admin : 鎵€鏈夋潈闄�
  * user 锛氫笉鑳借繘琛屽悐閿€銆佸欢鏈熻瘉涔︺€傚彧鑳界敵璇凤紝鏌ヨ璇佷功銆�

### database config锛圡ySQL锛�

鏁版嵁搴撲俊鎭厤缃�

```yaml
db_config:
  user: root                   #鐢ㄦ埛鍚�
  password: 123456             #瀵嗙爜
  ip: 127.0.0.1                #鏁版嵁搴撴湇鍔″櫒鐨処P鍦板潃
  port: 3306                   #鏁版嵁搴撴湇鍔″櫒鐨勭鍙e彿
  dbname: chainmaker_ca        #寤虹珛鐨勬暟鎹簱鐨勫悕绉�
```

### log config

鏃ュ織鐩稿叧閰嶇疆

```yaml
log_config: 
  level: error               #鏃ュ織绛夌骇
  filename: ../log/ca.log    #鏃ュ織瀛樺彇璺緞
  max_size: 1                #鍦ㄨ繘琛屽垏鍓蹭箣鍓嶏紝鏃ュ織鏂囦欢鐨勬渶澶уぇ灏忥紙浠B涓哄崟浣嶏級
  max_age: 30                #淇濈暀鏃ф枃浠剁殑鏈€澶уぉ鏁�
  max_backups: 5             #淇濈暀鏃ф枃浠剁殑鏈€澶т釜鏁�
```

### pkcs11 config

纭欢鏈哄瘑鏈虹浉鍏抽厤缃�

```yaml
pkcs11_config:
  enabled: false                                   # pkcs11纭欢鍔犲瘑寮€鍏炽€�
  library: /usr/local/lib64/pkcs11/libupkcs11.so   # pkcs11杩炴帴搴撳湴鍧€銆�
  label: HSM                                       # slot 鏍囩
  password: 11111111                               # HSM token鐧诲綍瀵嗙爜
  session_cache_size: 10                           # session 缂撳瓨澶у皬
  hash: "SHA256"                                   # 鍝堝笇绠楁硶
```



## 鍙儴缃叉柟寮�

![CA-deployment.png](../images/CA-deployment.png)

### 閰嶇疆鏂囦欢鐨勪娇鐢�

**闆嗕腑寮�1锛�**

1. 灞炰簬闆嗕腑寮忛儴缃诧紝涓哄涓粍缁囨彁渚涙湇鍔★紝base_config.provide_service_for闇€瑕侀厤缃涓粍缁囥€�

2. 鍚敤澶氫釜涓棿CA锛宨ntermediate_config闇€瑕侀厤缃涓€�

3. 涓嶅厑璁哥户缁鍙戜腑闂碈A璇佷功锛宐ase_config.can_issue_ca涓篺alse銆�

**闆嗕腑寮�2锛�**

1. 灞炰簬闆嗕腑寮忛儴缃诧紝涓哄涓粍缁囨彁渚涙湇鍔★紝base_config.provide_service_for闇€瑕侀厤缃涓粍缁囥€�

2. 鍚敤鍗曚釜涓棿CA璇佷功锛宨ntermediate_config闇€瑕侀厤缃竴涓€�

3. 涓嶅厑璁哥户缁鍙戜腑闂碈A璇佷功锛宐ase_config.can_issue_ca涓篺alse銆�

**鍒嗗竷寮�1锛�**

灞炰簬鍒嗗竷寮忓拰闆嗕腑娣峰悎閮ㄧ讲鏂瑰紡

* 闆嗕腑寮忛儴鍒�

1. 涓哄涓粍缁囨彁渚涙湇鍔★紝base_config.provide_service_for闇€瑕侀厤缃涓粍缁囥€�

2. 娌℃湁鍚敤閰嶇疆涓棿CA璇佷功锛宨ntermediate_config涓嶉渶瑕侀厤缃€�

3. 鍏佽缁х画绛惧彂涓棿CA璇佷功锛宐ase_config.can_issue_ca涓簍ure銆�

* 鍒嗗竷寮忛儴鍒嗭細

1. 涓轰竴涓粍缁囨彁渚涙湇鍔★紝base_config.provide_service_for闇€瑕侀厤缃崟涓粍缁囥€�

2. root璇佷功閫夋嫨閰嶇疆鍚姩锛宺oot_config.csr閮ㄥ垎涓嶉渶瑕侀厤缃€�

3. 娌℃湁鍚敤閰嶇疆涓棿CA璇佷功锛宨ntermediate_config涓嶉渶瑕侀厤缃€�

4. 涓嶅厑璁哥户缁鍙戜腑闂碈A璇佷功锛宐ase_config.can_issue_ca涓篺alse銆�

**鍒嗗竷寮�2锛�**

1. 灞炰簬鍒嗗竷寮忛儴缃诧紝涓哄崟涓粍缁囨彁渚涙湇鍔★紝base_config.provide_service_for鍙渶瑕侀厤缃竴涓粍缁囥€�

2. 鍚敤閰嶇疆涓€涓腑闂碈A璇佷功锛宨ntermediate_config闇€瑕侀厤缃竴涓€�

3. 涓嶅厑璁哥户缁鍙戜腑闂碈A璇佷功锛宐ase_config.can_issue_ca涓篺alse銆�



## 鏈嶅姟鎺ュ彛

### Code涓嶮sg

| Code |                     Msg                     |     鍚箟     |
| :--: | :-----------------------------------------: | :----------: |
| 200  |  The request service returned successfully  |     鎴愬姛     |
| 202  |         Missing required parameters         | 杈撳叆鍙傛暟缂哄け |
| 204  |  There is an error in the input parameter   | 杈撳叆鍙傛暟闈炴硶 |
| 500  | An error occurred with the internal service | 鎵ц鏈嶅姟澶辫触 |

### 浼犲弬鏂瑰紡

缁熶竴涓簉equest body JSON鐨勫舰寮忋€�

### 鐧诲綍鑾峰彇token鎺ュ彛

璇锋眰鍦板潃锛歨ttp://localhost:8090/api/ca/login

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|  瀛楁  |  绫诲瀷  |   鍚箟   | 澶囨敞 |
| :----: | :----: | :------: | :--: |
| appId  | string |  鐧诲綍id  | 蹇呭~ |
| appKey | string | 鐧诲綍鍙d护 | 蹇呭~ |

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": {
        "accessToken": "1111111",
        "expiressIn": 7200
    }
}
```

|    瀛楁     |  绫诲瀷  |      鍚箟      |
| :---------: | :----: | :------------: |
| accessToken | string |    token鍊�     |
| expiressIn  | number | 杩囨湡鏃堕棿锛堢锛� |

<span id="apply_cert"></span>

### 鐢宠璇佷功

浠庡垱寤哄瘑閽ュ鍒拌瘉涔︼紝涓€姝ュ畬鎴愩€�

璇锋眰URL锛歨ttp://localhost:8090/api/ca/gencert

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|     瀛楁      |  绫诲瀷  |       鍚箟       | 澶囨敞  |
| :-----------: | :----: | :--------------: | :---: |
|     orgId     | string |      缁勭粐ID      | 蹇呭~  |
|    userId     | string |      鐢ㄦ埛ID      | *閫夊~ |
|   userType    | string |     鐢ㄦ埛绫诲瀷     | 蹇呭~  |
|   certUsage   | string |     璇佷功鐢ㄩ€�     | 蹇呭~  |
| privateKeyPwd | string |     瀵嗛挜瀵嗙爜     | 閫夊~  |
|    country    | string | 璇佷功瀛楁锛堝浗瀹讹級 | 蹇呭~  |
|   locality    | string | 璇佷功瀛楁锛堝煄甯傦級 | 蹇呭~  |
|   province    | string | 璇佷功瀛楁锛堢渷浠斤級 | 蹇呭~  |
|     token     | string |      token       | 閫夊~  |

* userType: 1.root , 2.ca , 3.admin , 4.client , 5.consensus , 6.common

* certUsage: 1.sign , 2.tls , 3.tls-sign , 4.tls-enc

*娉細

* userId 鍙湁鍦ㄧ敵璇风殑鐢ㄦ埛绫诲瀷鏄痗a鐨勭被鍨嬫椂锛屽彲浠ュ~鍐欎负绌恒€傚湪鐢宠鑺傜偣璇佷功鏃讹紝闇€瑕佷繚璇侀摼涓婅妭鐐笽D鍞竴銆�

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": {
        "certSn": 4523845175273844671,
        "issueCertSn": 1146073575643658842,
        "cert": "-----BEGIN CERTIFICATE-----\nMIIChjCCAiugAwIBAgIIPsftN/MP778wCgYIKoZIzj0EAwIwgYMxCzAJBgNVBAYT\nAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAwDgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQK\nExZ3eC1vcmcxLmNoYWlubWFrZXIub3JnMQswCQYDVQQLEwJjYTEiMCAGA1UEAxMZ\nY2Etd3gtb3JnMS5jaGFpbm1ha2VyLm9yZzAeFw0yMjAzMTgwOTI0MjdaFw0yMjA5\nMTQwOTI0MjdaMGkxCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlKaW5nMRAwDgYD\nVQQHEwdCZWlKaW5nMQ0wCwYDVQQKEwRvcmcxMRIwEAYDVQQLEwljb25zZW5zdXMx\nEzARBgNVBAMTCmNvbnNlbnN1czEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ6\nRB+oQkJscRI1emYcYGMHx1AU/f9bkMOuqSdNspv6LjvdEftlBOVO7mazi5J4Ve8l\nHb65jLfnG6fBMZ7a0v5Vo4GhMIGeMA4GA1UdDwEB/wQEAwID+DAdBgNVHSUEFjAU\nBggrBgEFBQcDAgYIKwYBBQUHAwEwKQYDVR0OBCIEIGUw1TBs0Tw0Ud3HH/80neNM\nBhFcJ4u2vlzMd59943M6MCsGA1UdIwQkMCKAIFtql8AWsUPDhPN5EOpjhLf1Jrev\nUez0a7h0I3J3OrBgMBUGA1UdEQQOMAyCCmNvbnNlbnN1czEwCgYIKoZIzj0EAwID\nSQAwRgIhAPs+jzEu9H177kgyb3iFYM/LuIHNUaIsLnUAKZq9jW3NAiEA9iGP1sg3\nUXWIFW7mpRwzzakdJPkz8l+4ZPzV2nzEOjI=\n-----END CERTIFICATE-----\n",
        "privateKey": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIL2vmKiNl3hymnVvjkD3f9xrGAmvJCZEkGD4VwueObaPoAoGCCqGSM49\nAwEHoUQDQgAEOkQfqEJCbHESNXpmHGBjB8dQFP3/W5DDrqknTbKb+i473RH7ZQTl\nTu5ms4uSeFXvJR2+uYy35xunwTGe2tL+VQ==\n-----END EC PRIVATE KEY-----\n"
    }
}
```

| 瀛楁        | 绫诲瀷   | 鍚箟         | 澶囨敞 |
| ----------- | ------ | ------------ | ---- |
| cert        | string | 璇佷功鍐呭     |      |
| privateKey  | string | 瀵嗛挜鍐呭     |      |
| certSn      | number | 璇佷功搴忓垪鍙�   |      |
| issueCertSn | number | CA璇佷功搴忓垪鍙� |      |



### 鐢宠CSR

璇锋眰URL锛� http://localhost:8090/api/ca/gencsr

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|     瀛楁      |  绫诲瀷  |       鍚箟       | 澶囨敞  |
| :-----------: | :----: | :--------------: | :---: |
|     orgId     | string |      缁勭粐ID      | 蹇呭~  |
|    userId     | string |      鐢ㄦ埛ID      | *閫夊~ |
|   userType    | string |     鐢ㄦ埛绫诲瀷     | 蹇呭~  |
| privateKeyPwd | string |     瀵嗛挜瀵嗙爜     | 閫夊~  |
|    country    | string | 璇佷功瀛楁锛堝浗瀹讹級 | 蹇呭~  |
|   locality    | string | 璇佷功瀛楁锛堝煄甯傦級 | 蹇呭~  |
|   province    | string | 璇佷功瀛楁锛堢渷浠斤級 | 蹇呭~  |
|     token     | string |      token       | *閫夊~ |

* userType: 1.root , 2.ca , 3.admin , 4.client , 5.consensus , 6.common

*娉細

* userId 鍙湁鍦ㄧ敵璇风殑鐢ㄦ埛绫诲瀷鏄痗a鐨勭被鍨嬫椂锛屽彲浠ュ~鍐欎负绌恒€傚湪鐢宠鑺傜偣璇佷功鏃讹紝闇€瑕佷繚璇侀摼涓婅妭鐐笽D鍞竴銆�

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": "-----BEGIN CERTIFICATE REQUEST-----\nMIIBHjCBxQIBADBjMQ4wDAYDVQQGEwVjaGluYTEQMA4GA1UECBMHYmVpamluZzEQ\nMA4GA1UEBxMHaGFpZGlhbjENMAsGA1UEChMEb3JnNzEOMAwGA1UECxMFYWRtaW4x\nDjAMBgNVBAMTBXVzZXIyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaRv9OA2Z\nm/GcJibe/77u8lpABOLOVGgHzAzOd/h+9+Kq4+46CjXaISxEeTrqEMhLKCjcM1Bb\nm8jF5rWiQCFKFaAAMAoGCCqGSM49BAMCA0gAMEUCIFYjsphgIcInLjdhyYtILnFR\nJH7T/vahNbut8OvEgQ9tAiEAsNxL8xw+hGfhd9NgrxEx3Fv9Vj6wv1X3jaHvljME\n76U=\n-----END CERTIFICATE REQUEST-----\n"
}
```

### 閫氳繃CSR鐢宠璇佷功

璇锋眰URL锛歨ttp://localhost:8090/api/ca/gencertbycsr

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|   瀛楁    |  绫诲瀷  |   鍚箟    | 澶囨敞  |
| :-------: | :----: | :-------: | :---: |
|   orgId   | string |  缁勭粐ID   | 蹇呭~  |
|  userId   | string |  鐢ㄦ埛ID   | *閫夊~ |
| userType  | string | 鐢ㄦ埛绫诲瀷  | 蹇呭~  |
| certUsage | string | 璇佷功鐢ㄩ€�  | 蹇呭~  |
|    csr    | string | csr鏂囦欢娴� | 蹇呭~  |
|   token   | string |   token   | 閫夊~  |

* userType: 1.root , 2.ca , 3.admin , 4.client , 5.consensus , 6.common
* certUsage: 1.sign , 2.tls , 3.tls-sign , 4.tls-enc

*娉細

* userId 鍙湁鍦ㄧ敵璇风殑鐢ㄦ埛绫诲瀷鏄痗a鐨勭被鍨嬫椂锛屽彲浠ュ~鍐欎负绌恒€傚湪鐢宠鑺傜偣璇佷功鏃讹紝闇€瑕佷繚璇侀摼涓婅妭鐐笽D鍞竴銆�

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": {
        "certSn": 1752004958408437983,
        "issueCertSn": 1146073575643658842,
        "cert": "-----BEGIN CERTIFICATE-----\nMIIChDCCAiugAwIBAgIIGFBfOiaocN8wCgYIKoZIzj0EAwIwgYMxCzAJBgNVBAYT\nAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAwDgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQK\nExZ3eC1vcmcxLmNoYWlubWFrZXIub3JnMQswCQYDVQQLEwJjYTEiMCAGA1UEAxMZ\nY2Etd3gtb3JnMS5jaGFpbm1ha2VyLm9yZzAeFw0yMjAzMTgwOTMzNDZaFw0yMjA5\nMTQwOTMzNDZaMGkxCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlKaW5nMRAwDgYD\nVQQHEwdCZWlKaW5nMQ0wCwYDVQQKEwRvcmcyMRIwEAYDVQQLEwljb25zZW5zdXMx\nEzARBgNVBAMTCmNvbnNlbnN1czIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASi\ntzITs9l/4UpGCXzEbdlC+PhvxY/vjE/7HpGR7fdFshFEZM2sk4xVTA+b2LsIv0sf\nkverCTMdZVG3SwymTMlFo4GhMIGeMA4GA1UdDwEB/wQEAwID+DAdBgNVHSUEFjAU\nBggrBgEFBQcDAgYIKwYBBQUHAwEwKQYDVR0OBCIEIHJE5sXl09uw/aXHEm94uNt/\nf9/uJ6yWQv06UWioE0bMMCsGA1UdIwQkMCKAIFtql8AWsUPDhPN5EOpjhLf1Jrev\nUez0a7h0I3J3OrBgMBUGA1UdEQQOMAyCCmNvbnNlbnN1czIwCgYIKoZIzj0EAwID\nRwAwRAIgQyvmQDV4WYUnDRmI8vkm5pXwxvACscJ5pCqjT60SFsUCIDkEK+uURJBJ\ndnzPNSF8HWcMBiNKbWeSZtZ3EtPWlyHp\n-----END CERTIFICATE-----\n"
    }
}
```

| 瀛楁        | 绫诲瀷   | 鍚箟         | 澶囨敞 |
| ----------- | ------ | ------------ | ---- |
| cert        | string | 璇佷功鍐呭     |      |
| certSn      | number | 璇佷功搴忓垪鍙�   |      |
| issueCertSn | number | CA璇佷功搴忓垪鍙� |      |

<span id="query_cert"></span>

### 澶氭潯浠舵煡璇㈣瘉涔�

璇锋眰URL锛歨ttp://localhost:8090/api/ca/querycerts

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|   瀛楁    |  绫诲瀷  |    鍚箟    | 澶囨敞 |
| :-------: | :----: | :--------: | :--: |
|   orgId   | string |   缁勭粐ID   | 閫夊~ |
|  userId   | string |   鐢ㄦ埛ID   | 閫夊~ |
| userType  | string |  鐢ㄦ埛绫诲瀷  | 閫夊~ |
| certUsage | string |  璇佷功鐢ㄩ€�  | 閫夊~ |
|  certSn   | number | 璇佷功搴忓垪鍙� | 閫夊~ |
|   token   | string |   token    | 閫夊~ |

* userType: 1.root , 2.ca , 3.admin , 4.client , 5.consensus , 6.common
* certUsage: 1.sign , 2.tls , 3.tls-sign , 4.tls-enc

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": [
        {
            "userId": "consensus1",
            "orgId": "org1",
            "userType": "consensus",
            "certUsage": "tls",
            "certSn": 4523845175273844671,
            "issuerSn": 1146073575643658842,
            "certContent": "-----BEGIN CERTIFICATE-----\nMIIChjCCAiugAwIBAgIIPsftN/MP778wCgYIKoZIzj0EAwIwgYMxCzAJBgNVBAYT\nAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAwDgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQK\nExZ3eC1vcmcxLmNoYWlubWFrZXIub3JnMQswCQYDVQQLEwJjYTEiMCAGA1UEAxMZ\nY2Etd3gtb3JnMS5jaGFpbm1ha2VyLm9yZzAeFw0yMjAzMTgwOTI0MjdaFw0yMjA5\nMTQwOTI0MjdaMGkxCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlKaW5nMRAwDgYD\nVQQHEwdCZWlKaW5nMQ0wCwYDVQQKEwRvcmcxMRIwEAYDVQQLEwljb25zZW5zdXMx\nEzARBgNVBAMTCmNvbnNlbnN1czEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ6\nRB+oQkJscRI1emYcYGMHx1AU/f9bkMOuqSdNspv6LjvdEftlBOVO7mazi5J4Ve8l\nHb65jLfnG6fBMZ7a0v5Vo4GhMIGeMA4GA1UdDwEB/wQEAwID+DAdBgNVHSUEFjAU\nBggrBgEFBQcDAgYIKwYBBQUHAwEwKQYDVR0OBCIEIGUw1TBs0Tw0Ud3HH/80neNM\nBhFcJ4u2vlzMd59943M6MCsGA1UdIwQkMCKAIFtql8AWsUPDhPN5EOpjhLf1Jrev\nUez0a7h0I3J3OrBgMBUGA1UdEQQOMAyCCmNvbnNlbnN1czEwCgYIKoZIzj0EAwID\nSQAwRgIhAPs+jzEu9H177kgyb3iFYM/LuIHNUaIsLnUAKZq9jW3NAiEA9iGP1sg3\nUXWIFW7mpRwzzakdJPkz8l+4ZPzV2nzEOjI=\n-----END CERTIFICATE-----\n",
            "expirationDate": 1663147467,
            "isRevoked": false
        },
        {
            "userId": "consensus2",
            "orgId": "org2",
            "userType": "consensus",
            "certUsage": "tls",
            "certSn": 1752004958408437983,
            "issuerSn": 1146073575643658842,
            "certContent": "-----BEGIN CERTIFICATE-----\nMIIChDCCAiugAwIBAgIIGFBfOiaocN8wCgYIKoZIzj0EAwIwgYMxCzAJBgNVBAYT\nAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAwDgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQK\nExZ3eC1vcmcxLmNoYWlubWFrZXIub3JnMQswCQYDVQQLEwJjYTEiMCAGA1UEAxMZ\nY2Etd3gtb3JnMS5jaGFpbm1ha2VyLm9yZzAeFw0yMjAzMTgwOTMzNDZaFw0yMjA5\nMTQwOTMzNDZaMGkxCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlKaW5nMRAwDgYD\nVQQHEwdCZWlKaW5nMQ0wCwYDVQQKEwRvcmcyMRIwEAYDVQQLEwljb25zZW5zdXMx\nEzARBgNVBAMTCmNvbnNlbnN1czIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASi\ntzITs9l/4UpGCXzEbdlC+PhvxY/vjE/7HpGR7fdFshFEZM2sk4xVTA+b2LsIv0sf\nkverCTMdZVG3SwymTMlFo4GhMIGeMA4GA1UdDwEB/wQEAwID+DAdBgNVHSUEFjAU\nBggrBgEFBQcDAgYIKwYBBQUHAwEwKQYDVR0OBCIEIHJE5sXl09uw/aXHEm94uNt/\nf9/uJ6yWQv06UWioE0bMMCsGA1UdIwQkMCKAIFtql8AWsUPDhPN5EOpjhLf1Jrev\nUez0a7h0I3J3OrBgMBUGA1UdEQQOMAyCCmNvbnNlbnN1czIwCgYIKoZIzj0EAwID\nRwAwRAIgQyvmQDV4WYUnDRmI8vkm5pXwxvACscJ5pCqjT60SFsUCIDkEK+uURJBJ\ndnzPNSF8HWcMBiNKbWeSZtZ3EtPWlyHp\n-----END CERTIFICATE-----\n",
            "expirationDate": 1663148026,
            "isRevoked": false
        }
    ]
}
```

|      瀛楁      |  绫诲瀷   |       鍚箟       |    澶囨敞    |
| :------------: | :-----: | :--------------: | :--------: |
|     certSn     | number  |    璇佷功搴忓垪鍙�    |            |
|    issuerSn    | number  | 绛惧彂鑰呰瘉涔﹀簭鍒楀彿 |            |
|  certContent   | string  |     璇佷功鍐呭     |            |
|     userId     | string  |      鐢ㄦ埛ID      |            |
|     orgId      | string  |      缁勭粐ID      |            |
|    userType    | string  |     鐢ㄦ埛绫诲瀷     |            |
|   certUsage    | string  |     璇佷功鐢ㄩ€�     |            |
| expirationDate | number  |     鍒版湡鏃堕棿     | unix鏃堕棿鎴� |
|   isRevoked    | boolean |    鏄惁琚挙閿€    |            |

<span id="renewcert"></span>

### 寤舵湡璇佷功

璇锋眰URL锛歨ttp://localhost:8090/api/ca/renewcert

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|  瀛楁  |  绫诲瀷  |    鍚箟    | 澶囨敞 |
| :----: | :----: | :--------: | :--: |
| certSn | number | 璇佷功搴忓垪鍙� | 蹇呭~ |
| token  | string |   token    | 閫夊~ |

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": {
        "certSn": 1752004958408437983,
        "issueCertSn": 1146073575643658842,
        "cert": "-----BEGIN CERTIFICATE-----\nMIIChTCCAiugAwIBAgIIGFBfOiaocN8wCgYIKoZIzj0EAwIwgYMxCzAJBgNVBAYT\nAkNOMRAwDgYDVQQIEwdCZWlqaW5nMRAwDgYDVQQHEwdCZWlqaW5nMR8wHQYDVQQK\nExZ3eC1vcmcxLmNoYWlubWFrZXIub3JnMQswCQYDVQQLEwJjYTEiMCAGA1UEAxMZ\nY2Etd3gtb3JnMS5jaGFpbm1ha2VyLm9yZzAeFw0yMjAzMTgwOTMzNDZaFw0yMzAz\nMTMwOTMzNDZaMGkxCzAJBgNVBAYTAkNOMRAwDgYDVQQIEwdCZWlKaW5nMRAwDgYD\nVQQHEwdCZWlKaW5nMQ0wCwYDVQQKEwRvcmcyMRIwEAYDVQQLEwljb25zZW5zdXMx\nEzARBgNVBAMTCmNvbnNlbnN1czIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASi\ntzITs9l/4UpGCXzEbdlC+PhvxY/vjE/7HpGR7fdFshFEZM2sk4xVTA+b2LsIv0sf\nkverCTMdZVG3SwymTMlFo4GhMIGeMA4GA1UdDwEB/wQEAwID+DAdBgNVHSUEFjAU\nBggrBgEFBQcDAgYIKwYBBQUHAwEwKQYDVR0OBCIEIHJE5sXl09uw/aXHEm94uNt/\nf9/uJ6yWQv06UWioE0bMMCsGA1UdIwQkMCKAIFtql8AWsUPDhPN5EOpjhLf1Jrev\nUez0a7h0I3J3OrBgMBUGA1UdEQQOMAyCCmNvbnNlbnN1czIwCgYIKoZIzj0EAwID\nSAAwRQIhAOdDmyl0xI3cAxahOXc5pe8RYvl4OquK8jco0E+eqU+LAiBlxgWg1CqW\nk4a1oJF+LK/e1cUXnctf/6NqJLycIElwkA==\n-----END CERTIFICATE-----\n"
    }
}
```

### 鎾ら攢璇佷功

璇锋眰URL锛歨ttp://localhost:8090/api/ca/revokecert

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|     瀛楁      |  绫诲瀷  |          鍚箟          | 澶囨敞 |
| :-----------: | :----: | :--------------------: | :--: |
| revokedCertSn | number |       璇佷功搴忓垪鍙�       | 蹇呭~ |
| issuerCertSn  | number | 鎾ら攢鑰咃紙ca锛夎瘉涔﹀簭鍒楀彿 | 蹇呭~ |
|    reason     | string |        鎾ら攢鍘熷洜        | 閫夊~ |
|     token     | string |         token          | 閫夊~ |

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": "-----BEGIN CRL-----\nMIIBNTCB3AIBATAKBggqhkjOPQQDAjBfMQswCQYDVQQGEwJDTjEQMA4GA1UECBMH\nQmVpamluZzEQMA4GA1UEBxMHQmVpamluZzENMAsGA1UEChMEb3JnMTELMAkGA1UE\nCxMCY2ExEDAOBgNVBAMTB2NhLm9yZzgXDTIxMDYxMTA5NTQ0M1oXDTIxMDYxMTEw\nNTQ0M1owGzAZAggdEyilMlypBhcNMjMwNjExMDkxODA2WqAvMC0wKwYDVR0jBCQw\nIoAgyQvrO7BQev3fQxYIUIroQcF7HbmWFM/A7Ko2Etu9hCMwCgYIKoZIzj0EAwID\nSAAwRQIgFslGwq9Bb9a4wrOSatqRwRu9E0QMmCavrgr6GQRn5fcCIQDCV8mAepI9\nDLEbHtDHqzJ/CrGcRMJWL3gYzBNhWE/yLQ==\n-----END CRL-----\n"
}
```

### 鑾峰彇鏌愪釜CA鐨勬渶鏂扮殑鎾ら攢鍒楄〃

璇锋眰URL锛歨ttp://localhost:8090/api/ca/gencrl

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

|     瀛楁     |  绫诲瀷  |     鍚箟     | 澶囨敞 |
| :----------: | :----: | :----------: | :--: |
| issuerCertSn | number | CA璇佷功搴忓垪鍙� | 蹇呭~ |
|    token     | string |    token     | 閫夊~ |

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": "-----BEGIN CRL-----\nMIIBNTCB3AIBATAKBggqhkjOPQQDAjBfMQswCQYDVQQGEwJDTjEQMA4GA1UECBMH\nQmVpamluZzEQMA4GA1UEBxMHQmVpamluZzENMAsGA1UEChMEb3JnMTELMAkGA1UE\nCxMCY2ExEDAOBgNVBAMTB2NhLm9yZzgXDTIxMDYxMTA5NTQ0M1oXDTIxMDYxMTEw\nNTQ0M1owGzAZAggdEyilMlypBhcNMjMwNjExMDkxODA2WqAvMC0wKwYDVR0jBCQw\nIoAgyQvrO7BQev3fQxYIUIroQcF7HbmWFM/A7Ko2Etu9hCMwCgYIKoZIzj0EAwID\nSAAwRQIgFslGwq9Bb9a4wrOSatqRwRu9E0QMmCavrgr6GQRn5fcCIQDCV8mAepI9\nDLEbHtDHqzJ/CrGcRMJWL3gYzBNhWE/yLQ==\n-----END CRL-----\n"
}
```

<span id="get_nodeId"></span>

### 鑾峰彇鑺傜偣TLS璇佷功鐨凬odeID

璇锋眰URL锛歨ttp://localhost:8090/api/ca/getnodeid

璇锋眰鏂瑰紡锛歅OST

璇锋眰鍙傛暟锛�

鏉′欢鏌ユ壘鏂瑰紡锛�

|   瀛楁    |  绫诲瀷  |   鍚箟   | 澶囨敞 |
| :-------: | :----: | :------: | :--: |
|   orgId   | string |  缁勭粐ID  | 蹇呭~ |
|  userId   | string |  鐢ㄦ埛ID  | 蹇呭~ |
| userType  | string | 鐢ㄦ埛绫诲瀷 | 蹇呭~ |
| certUsage | string | 璇佷功鐢ㄩ€� | 蹇呭~ |
|   token   | string |  token   | 閫夊~ |

搴忓垪鍙锋煡鎵炬柟寮忥細

|  瀛楁  |  绫讳技  |    鍚箟    | 澶囨敞 |
| :----: | :----: | :--------: | :--: |
| certSn | number | 璇佷功搴忓垪鍙� | 蹇呭~ |
| token  | string |   token    | 閫夊~ |

杩斿洖鏁版嵁锛�

```json
{
    "code": 200,
    "msg": "The request service returned successfully",
    "data": "QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
}
```



## 浣跨敤妗堜緥

### 妗堜緥涓€锛氫娇鐢ㄥ凡鏈夌粍缁囩殑CA璇佷功锛岄鍙戣妭鐐瑰拰鐢ㄦ埛璇佷功

#### 鐜鍑嗗

+ 宸茬粡鎴愬姛鍚姩鐨勯暱瀹夐摼

  璇︽儏鍚姩娴佺▼瑙乕蹇€熷叆闂╙(../recovery/閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼)

+ CA鏈嶅姟鐨勯厤缃枃浠讹紙绀轰緥锛�

```yaml
# log config
log_config:
  level: info                                   # The log level                               
  filename: ../log/ca.log                       # The path to the log file            
  max_size: 1                                   # The maximum size of the log file before cutting (MB)
  max_age: 30                                   # The maximum number of days to retain old log files
  max_backups: 5                                # Maximum number of old log files to keep

# db config
db_config:
  user: root
  password: 123456
  ip: 127.0.0.1
  port: 13306
  dbname: chainmaker_ca

# Base config
base_config:
  server_port: 8090                                  # Server port configuration
  ca_type: single_root                               # Ca server type : double_root/single_root/tls/sign
#  expire_year: 2                                    # The expiration time of the certificate (year)
  expire_month: 6                                    # The expiration time of the certificate (month)(high level)
#  cert_valid_time : 2m                              # cert valid time (for testing use only)
  hash_type: SHA256                                  # SHA256/SHA3_256/SM3
  key_type: ECC_NISTP256                             # ECC_NISTP256/SM2
  can_issue_ca: false                                # Whether can continue to issue CA cert
#  provide_service_for: [wx-org1.chainmaker.org,wx-org2.chainmaker.org,wx-org3.chainmaker.org,wx-org4.chainmaker.org]      
                                                     # A list of organizations that provide services
  key_encrypt: false                                 # Whether the key is stored in encryption
  access_control: false                              # Whether to enable permission control
#  default_domain: chainmaker.org                    # the default value for sans in the certificate

pkcs11_config:
  enabled: false
  library: /usr/local/lib64/pkcs11/libupkcs11.so
  label: HSM
  password: 11111111
  session_cache_size: 10
  hash: "SHA256"

# Root CA config
root_config:
  cert:
    - cert_type: sign                                                  # Certificate path type : tls/sign (if ca_type is 'single_root',should be sign)
      cert_path: ../crypto-config/rootCA/root.crt                      # Certificate file path
      private_key_path: ../crypto-config/rootCA/root.key               # private key file path    
      key_id: SM2SignKey261                                            # pkcs11 key id
  # csr:
  #   CN: root                
  #   O: org-root                         
  #   OU: root                         
  #   country: CN                      
  #   locality: Beijing                
  #   province: Beijing             

# access control config
access_control_config:
  - app_role: admin
    app_id: admin1
    app_key: passw0rd
  - app_role: user
    app_id: user1
    app_key: passw0rd
```

淇敼閰嶇疆

```yaml
# Root CA config
root_config:
  cert:
    - cert_type: sign                                                  # Certificate path type : tls/sign (if ca_type is 'single_root',should be sign)
      cert_path: ../crypto-config/rootCA/root.crt                      # Certificate file path
      private_key_path: ../crypto-config/rootCA/root.key               # private key file path    
      key_id: SM2SignKey261                                            # pkcs11 key id
  # csr:
  #   CN: root                
  #   O: org-root                         
  #   OU: root                         
  #   country: CN                      
  #   locality: Beijing                
  #   province: Beijing   
```

闇€瑕佷慨鏀癸細

1. cert_path: 闇€灏嗚璺緞涓嬬殑璇佷功鏂囦欢鏇挎崲鎴愬湪閾句笂宸叉湁缁勭粐鐨刞CA璇佷功鏂囦欢`銆�

   涔熷彲鐩存帴鏇挎崲璺緞锛屼絾鏄娉ㄦ剰鐨勬槸锛屽鏋滈噰鐢╠ocker鏂瑰紡鍚姩鐨勮瘽锛岄渶瑕佷慨鏀筪ocker瀹瑰櫒鏂囦欢鐨勬槧灏勮矾寰勶紝淇敼deploy.sh鏂囦欢锛�

   ```yaml
   -v $path/crypto-config:/crypto-config \
   ```

   灏哷$path/crypto-config`鐩綍鏇挎崲

2. private_key_path: 闇€灏嗚璺緞涓嬬殑瀵嗛挜鏂囦欢鏇挎崲鎴愬湪閾句笂宸叉湁缁勭粐鐨刞CA瀵嗛挜鏂囦欢`銆�

   涔熷彲鐩存帴鏇挎崲璺緞锛屼絾鏄娉ㄦ剰鐨勬槸锛屽鏋滈噰鐢╠ocker鏂瑰紡鍚姩鐨勮瘽锛岄渶瑕佷慨鏀筪ocker瀹瑰櫒鏂囦欢鐨勬槧灏勮矾寰勶紝淇敼deploy.sh鏂囦欢锛�
   
   ```yaml
   -v $path/crypto-config:/crypto-config \
   ```
   
   灏哷$path/crypto-config`鐩綍鏇挎崲
   
2. csr: 闇€瑕佹敞閲婃帀锛屼笉鍐嶉厤缃€傦紙鐢变簬root CA鏄厤缃惎鍔紝涓嶉渶瑕佽閮ㄥ垎淇℃伅鍘荤敓鎴愶級

2. intermediate_config锛氶渶瑕佹敞閲婃帀锛屼笉鍐嶉厤缃€�

   

+ 宸茬粡鍚姩鐨凜A鏈嶅姟

  璇︽儏鍚姩娴佺▼瑙佷笂鏂嘯瀹夎閮ㄧ讲](#deploy)

  

#### 鐢熸垚璇佷功

璋冪敤涓婃枃涓璠鐢宠璇佷功](#apply_cert)鐨勬帴鍙�

**鍙傛暟濉啓锛堜互BodyJSON涓轰緥锛�**

鍏辫瘑鑺傜偣锛坈onsensus node锛塖ign璇佷功

**娉細鐢熸垚鍏辫瘑鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.consensus1.com",
    "userType": "consensus",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鍏辫瘑鑺傜偣锛坈onsensus node锛塗ls璇佷功

**娉細鐢熸垚鍏辫瘑鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.consensus1.com",
    "userType": "consensus",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鍚屾鑺傜偣锛坈ommon node锛塖ign璇佷功

**娉細鐢熸垚鍚屾鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.common1.com",
    "userType": "common",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鍚屾鑺傜偣锛坈ommon node锛塗ls璇佷功

**娉細鐢熸垚鍚屾鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.common1.com",
    "userType": "common",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛绠$悊鍛橈紙admin锛塖ign璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "admin1",
    "userType": "admin",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛绠$悊鍛橈紙admin锛塗ls璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "admin1",
    "userType": "admin",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛瀹㈡埛绔紙client锛塖ign璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "client1",
    "userType": "client",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛瀹㈡埛绔紙client锛塗ls璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "client1",
    "userType": "client",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

**娉細浣跨敤CA棰佸彂鐨勮妭鐐瑰拰鐢ㄦ埛璇佷功鏃讹紝闇€瑕佸皢sdk閰嶇疆鏂囦欢涓殑`tls_host_name`锛屾敼鎴愯妭鐐箃ls璇佷功鐨剈serId**

浠ョ粍缁�1鐨勫叡璇嗚妭鐐逛负渚嬶細

```yaml
  nodes:
    - # 鑺傜偣鍦板潃锛屾牸寮忎负锛欼P:绔彛:杩炴帴鏁�
      node_addr: "127.0.0.1:12301"
      # 鑺傜偣杩炴帴鏁�
      conn_cnt: 10
      # RPC杩炴帴鏄惁鍚敤鍙屽悜TLS璁よ瘉
      enable_tls: true
      # 淇′换璇佷功姹犺矾寰�
      trust_root_paths:
        - "./testdata/crypto-config/wx-org1.chainmaker.org/ca"
      # TLS hostname
      # tls_host_name: "chainmaker.org"
      #########################################
      tls_host_name: "org1.consensus1.com"
      #########################################
```



#### 鑾峰彇鑺傜偣TLS璇佷功鐨凬odeId

璋冪敤涓婃枃涓璠鑾峰彇鑺傜偣TLS璇佷功鐨凬odeID](#get_nodeId)鐨勬帴鍙�

**鍙傛暟濉啓锛堜互BodyJSON涓轰緥锛�**

鑾峰彇鍏辫瘑鑺傜偣锛坈onsensus node锛塗ls璇佷功鐨凬odeId

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.consensus1.com",
    "userType": "consensus",
    "certUsage": "tls"
}
```

鑾峰彇鍏辫瘑鑺傜偣锛坈ommon node锛塗ls璇佷功鐨凬odeId

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.common1.com",
    "userType": "common",
    "certUsage": "tls"
}
```

灏哷bc1.yml`鍜宍chainmaker.yml`涓殑nodeId鏇挎崲锛岄厤缃枃浠朵慨鏀逛綅缃涓嬶細

- bc1.yml

```yaml
#鍏辫瘑閰嶇疆
consensus:
  # 鍏辫瘑绫诲瀷(0-SOLO,1-TBFT,2-MBFT,3-MAXBFT,4-RAFT,10-POW)
  type: 1
  # 鍏辫瘑鑺傜偣鍒楄〃锛岀粍缁囧繀椤诲嚭鐜板湪trust_roots鐨刼rg_id涓紝姣忎釜缁勭粐鍙厤缃涓叡璇嗚妭鐐癸紝鑺傜偣鍦板潃閲囩敤libp2p鏍煎紡
  nodes:
    - org_id: "wx-org1.chainmaker.org"
      node_id:
        - "QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - org_id: "wx-org2.chainmaker.org"
      node_id:
        - "QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
    - org_id: "wx-org3.chainmaker.org"
      node_id:
        - "QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"
    - org_id: "wx-org4.chainmaker.org"
      node_id:
        - "QmRRWXJpAVdhFsFtd9ah5F4LDQWFFBDVKpECAF8hssqj6H"
```

- chainmaker.yml

```yaml
# Network Settings
net:
  # Network provider, can be libp2p or liquid.
  # libp2p: using libp2p components to build the p2p module.
  # liquid: a new p2p module we build from 0 to 1.
  # This item must be consistent across the blockchain network.
  provider: LibP2P

  # The address and port the node listens on.
  # By default, it uses 0.0.0.0 to listen on all network interfaces.
  listen_addr: /ip4/0.0.0.0/tcp/11301

  # Max stream of a connection.
  # peer_stream_pool_size: 100

  # Max number of peers the node can connect.
  # max_peer_count_allow: 20

  # The strategy for eliminating node when the count of connecting peers reach the max value.
  # It could be: 1 Random, 2 FIFO, 3 LIFO. The default strategy is LIFO.
  # peer_elimination_strategy: 3

  # The seeds peer list used to join in the network when starting.
  # The connection supervisor will try to dial seed peer whenever the connection is broken.
  # Example ip format: "/ip4/127.0.0.1/tcp/11301/p2p/"+nodeid
  # Example dns format锛�"/dns/cm-node1.org/tcp/11301/p2p/"+nodeid
  seeds:
    - "/ip4/127.0.0.1/tcp/11301/p2p/QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - "/ip4/127.0.0.1/tcp/11302/p2p/QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
    - "/ip4/127.0.0.1/tcp/11303/p2p/QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"
    - "/ip4/127.0.0.1/tcp/11304/p2p/QmRRWXJpAVdhFsFtd9ah5F4LDQWFFBDVKpECAF8hssqj6H"
```



### 妗堜緥浜岋細浣跨敤CA鐢熸垚鍏ㄥ鐨凜hainMaker璇佷功

#### 鐜鍑嗗

+ 宸茬粡鎴愬姛鍚姩鐨勯暱瀹夐摼

  璇︽儏鍚姩娴佺▼瑙乕蹇€熷叆闂╙(../recovery/閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼)

+ CA鏈嶅姟鐨勯厤缃枃浠讹紙绀轰緥锛�

  ```yaml
  # log config
  log_config:
    level: info                                   # The log level                               
    filename: ../log/ca.log                       # The path to the log file            
    max_size: 1                                   # The maximum size of the log file before cutting (MB)
    max_age: 30                                   # The maximum number of days to retain old log files
    max_backups: 5                                # Maximum number of old log files to keep
  
  # db config
  db_config:
    user: root
    password: 123456
    ip: 127.0.0.1
    port: 13306
    dbname: chainmaker_ca
  
  # Base config
  base_config:
    server_port: 8090                                  # Server port configuration
    ca_type: single_root                               # Ca server type : double_root/single_root/tls/sign
  #  expire_year: 2                                    # The expiration time of the certificate (year)
    expire_month: 6                                    # The expiration time of the certificate (month)(high level)
  #  cert_valid_time : 2m                              # cert valid time (for testing use only)
    hash_type: SHA256                                  # SHA256/SHA3_256/SM3
    key_type: ECC_NISTP256                             # ECC_NISTP256/SM2
    can_issue_ca: false                                # Whether can continue to issue CA cert
  #  provide_service_for: [wx-org1.chainmaker.org,wx-org2.chainmaker.org,wx-org3.chainmaker.org,wx-org4.chainmaker.org]      
                                                       # A list of organizations that provide services
    key_encrypt: false                                  # Whether the key is stored in encryption
    access_control: false                              # Whether to enable permission control
  #  default_domain: chainmaker.org                    # the default value for sans in the certificate
  
  pkcs11_config:
    enabled: false
    library: /usr/local/lib64/pkcs11/libupkcs11.so
    label: HSM
    password: 11111111
    session_cache_size: 10
    hash: "SHA256"
  
  # Root CA config
  root_config:
    cert:
      - cert_type: sign                                                  # Certificate path type : tls/sign (if ca_type is 'single_root',should be sign)
        cert_path: ../crypto-config/rootCA/root.crt                      # Certificate file path
        private_key_path: ../crypto-config/rootCA/root.key               # private key file path    
        key_id: SM2SignKey261                                            # pkcs11 key id
    csr:
      CN: root                
      O: org-root                         
      OU: root                         
      country: CN                      
      locality: Beijing                
      province: Beijing             
  
  # intermediate config
  intermediate_config: 
    - csr:
        CN: ca-wx-org1.chainmaker.org                        
        O: wx-org1.chainmaker.org                        
        OU: ca                         
        country: CN                       
        locality: Beijing                
        province: Beijing            
      key_id: SM2SignKey6
  
    - csr:
        CN: ca-wx-org2.chainmaker.org                       
        O: wx-org2.chainmaker.org                     
        OU: ca                         
        country: CN                       
        locality: Beijing                
        province: Beijing            
      key_id: SM2SignKey249
      
    - csr:
        CN: ca-wx-org3.chainmaker.org                       
        O: wx-org3.chainmaker.org                    
        OU: ca                         
        country: CN                       
        locality: Beijing                
        province: Beijing            
      key_id: SM2SignKey257
  
    - csr:
        CN: ca-wx-org4.chainmaker.org                    
        O: wx-org4.chainmaker.org                    
        OU: ca                         
        country: CN                       
        locality: Beijing                
        province: Beijing            
      key_id: SM2SignKey260
  
  # access control config
  access_control_config:
    - app_role: admin
      app_id: admin1
      app_key: passw0rd
    - app_role: user
      app_id: user1
      app_key: passw0rd
  ```

- 宸茬粡鍚姩鐨凜A鏈嶅姟

  璇︽儏鍚姩娴佺▼瑙佷笂鏂嘯瀹夎閮ㄧ讲](#deploy)

  

#### 鑾峰彇CA璇佷功

鐢变簬浠ヤ笅閰嶇疆閮ㄥ垎锛孋A鏈嶅姟鍦ㄥ惎鍔ㄦ椂锛屽氨浼氱敓鎴愮浉搴旂殑缁勭粐CA璇佷功

```shell
intermediate_config: 
  - csr:
      CN: ca-wx-org1.chainmaker.org                        
      O: wx-org1.chainmaker.org                        
      OU: ca                         
      country: CN                       
      locality: Beijing                
      province: Beijing            
    key_id: SM2SignKey6

  - csr:
      CN: ca-wx-org2.chainmaker.org                       
      O: wx-org2.chainmaker.org                     
      OU: ca                         
      country: CN                       
      locality: Beijing                
      province: Beijing            
    key_id: SM2SignKey249
    
  - csr:
      CN: ca-wx-org3.chainmaker.org                       
      O: wx-org3.chainmaker.org                    
      OU: ca                         
      country: CN                       
      locality: Beijing                
      province: Beijing            
    key_id: SM2SignKey257

  - csr:
      CN: ca-wx-org4.chainmaker.org                    
      O: wx-org4.chainmaker.org                    
      OU: ca                         
      country: CN                       
      locality: Beijing                
      province: Beijing            
    key_id: SM2SignKey260
```



CA鏈嶅姟鍚姩鍚庯紝鐩存帴璋冪敤[澶氭潯浠舵煡璇㈣瘉涔(#query_cert)锛岃幏鍙朇A璇佷功

**鍙傛暟濉啓锛堜互BodyJSON涓轰緥锛�**

鑾峰彇org1鐨凜A璇佷功锛�

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userType": "ca",
    "certUsage": "sign"
}
```

鑾峰彇org2鐨凜A璇佷功锛�

```json
{
    "orgId": "wx-org2.chainmaker.org",
    "userType": "ca",
    "certUsage": "sign"
}
```

鑾峰彇org3鐨凜A璇佷功锛�

```json
{
    "orgId": "wx-org3.chainmaker.org",
    "userType": "ca",
    "certUsage": "sign"
}
```

鑾峰彇org4鐨凜A璇佷功锛�

```json
{
    "orgId": "wx-org4.chainmaker.org",
    "userType": "ca",
    "certUsage": "sign"
}
```

**娉細鑾峰彇鐨凜A璇佷功锛岄渶瑕佸湪鍚姩閾炬椂锛屽皢浠栦滑閰嶇疆鍒伴摼閰嶇疆鏂囦欢`bc1.yml`鐨刞trust_roots`閲�**



#### 鐢熸垚璇佷功

璋冪敤涓婃枃涓璠鐢宠璇佷功](#apply_cert)鐨勬帴鍙serId

**鍙傛暟濉啓锛堜互org1涓轰緥锛�**

鍏辫瘑鑺傜偣锛坈onsensus node锛塖ign璇佷功

**娉細鐢熸垚鍏辫瘑鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.consensus1.com",
    "userType": "consensus",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鍏辫瘑鑺傜偣锛坈onsensus node锛塗ls璇佷功

**娉細鐢熸垚鍏辫瘑鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.consensus1.com",
    "userType": "consensus",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鍚屾鑺傜偣锛坈ommon node锛塖ign璇佷功

**娉細鐢熸垚鍚屾鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.common1.com",
    "userType": "common",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鍚屾鑺傜偣锛坈ommon node锛塗ls璇佷功

**娉細鐢熸垚鍚屾鑺傜偣璇佷功鏃讹紝userId闇€瑕佷繚璇侀摼涓婂敮涓€锛涘悓涓€鑺傜偣鐨凷ign鍜孴ls璇佷功锛寀serId闇€瑕佷繚鎸佷竴鑷淬€�**

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.common1.com",
    "userType": "common",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛绠$悊鍛橈紙admin锛塖ign璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "admin1",
    "userType": "admin",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛绠$悊鍛橈紙admin锛塗ls璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "admin1",
    "userType": "admin",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛瀹㈡埛绔紙client锛塖ign璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "client1",
    "userType": "client",
    "certUsage": "sign",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

鐢ㄦ埛瀹㈡埛绔紙client锛塗ls璇佷功

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "client1",
    "userType": "client",
    "certUsage": "tls",
    "country": "CN",
    "locality": "BeiJing",
    "province": "BeiJing"
}
```

**娉細浣跨敤CA棰佸彂鐨勮妭鐐瑰拰鐢ㄦ埛璇佷功鏃讹紝闇€瑕佸皢sdk閰嶇疆鏂囦欢涓殑`tls_host_name`锛屾敼鎴愯妭鐐箃ls璇佷功鐨剈serId**

浠ョ粍缁�1鐨勫叡璇嗚妭鐐逛负渚嬶細

```yaml
  nodes:
    - # 鑺傜偣鍦板潃锛屾牸寮忎负锛欼P:绔彛:杩炴帴鏁�
      node_addr: "127.0.0.1:12301"
      # 鑺傜偣杩炴帴鏁�
      conn_cnt: 10
      # RPC杩炴帴鏄惁鍚敤鍙屽悜TLS璁よ瘉
      enable_tls: true
      # 淇′换璇佷功姹犺矾寰�
      trust_root_paths:
        - "./testdata/crypto-config/wx-org1.chainmaker.org/ca"
      # TLS hostname
      # tls_host_name: "chainmaker.org"
      #########################################
      tls_host_name: "org1.consensus1.com"
      #########################################
```



#### 鑾峰彇鑺傜偣TLS璇佷功鐨凬odeId

璋冪敤涓婃枃涓璠鑾峰彇鑺傜偣TLS璇佷功鐨凬odeID](#get_nodeId)鐨勬帴鍙�

**鍙傛暟濉啓锛堜互BodyJSON涓轰緥锛�**

鑾峰彇鍏辫瘑鑺傜偣锛坈onsensus node锛塗ls璇佷功鐨凬odeId

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.consensus1.com",
    "userType": "consensus",
    "certUsage": "tls"
}
```

鑾峰彇鍚屾鑺傜偣锛坈ommon node锛塗ls璇佷功鐨凬odeId

```json
{
    "orgId": "wx-org1.chainmaker.org",
    "userId": "org1.common1.com",
    "userType": "common",
    "certUsage": "tls"
}
```

灏哷bc1.yml`鍜宍chainmaker.yml`涓殑nodeId鏇挎崲锛岄厤缃枃浠朵慨鏀逛綅缃涓嬶細

- bc1.yml

```yaml
#鍏辫瘑閰嶇疆
consensus:
  # 鍏辫瘑绫诲瀷(0-SOLO,1-TBFT,2-MBFT,3-MAXBFT,4-RAFT,10-POW)
  type: 1
  # 鍏辫瘑鑺傜偣鍒楄〃锛岀粍缁囧繀椤诲嚭鐜板湪trust_roots鐨刼rg_id涓紝姣忎釜缁勭粐鍙厤缃涓叡璇嗚妭鐐癸紝鑺傜偣鍦板潃閲囩敤libp2p鏍煎紡
  nodes:
    - org_id: "wx-org1.chainmaker.org"
      node_id:
        - "QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - org_id: "wx-org2.chainmaker.org"
      node_id:
        - "QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
    - org_id: "wx-org3.chainmaker.org"
      node_id:
        - "QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"
    - org_id: "wx-org4.chainmaker.org"
      node_id:
        - "QmRRWXJpAVdhFsFtd9ah5F4LDQWFFBDVKpECAF8hssqj6H"
```

- chainmaker.yml

```yaml
# Network Settings
net:
  # Network provider, can be libp2p or liquid.
  # libp2p: using libp2p components to build the p2p module.
  # liquid: a new p2p module we build from 0 to 1.
  # This item must be consistent across the blockchain network.
  provider: LibP2P

  # The address and port the node listens on.
  # By default, it uses 0.0.0.0 to listen on all network interfaces.
  listen_addr: /ip4/0.0.0.0/tcp/11301

  # Max stream of a connection.
  # peer_stream_pool_size: 100

  # Max number of peers the node can connect.
  # max_peer_count_allow: 20

  # The strategy for eliminating node when the count of connecting peers reach the max value.
  # It could be: 1 Random, 2 FIFO, 3 LIFO. The default strategy is LIFO.
  # peer_elimination_strategy: 3

  # The seeds peer list used to join in the network when starting.
  # The connection supervisor will try to dial seed peer whenever the connection is broken.
  # Example ip format: "/ip4/127.0.0.1/tcp/11301/p2p/"+nodeid
  # Example dns format锛�"/dns/cm-node1.org/tcp/11301/p2p/"+nodeid
  seeds:
    - "/ip4/127.0.0.1/tcp/11301/p2p/QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - "/ip4/127.0.0.1/tcp/11302/p2p/QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
    - "/ip4/127.0.0.1/tcp/11303/p2p/QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"
    - "/ip4/127.0.0.1/tcp/11304/p2p/QmRRWXJpAVdhFsFtd9ah5F4LDQWFFBDVKpECAF8hssqj6H"
```



**閲嶅浠ヤ笂姝ラ锛屼緷娆$敓鎴恛rg2锛宱rg3锛宱rg4鐨勫叏閮ㄨ瘉涔﹀嵆鍙湪閾句笂浣跨敤銆�**




<span id="鍏煎澶栭儴璇佷功"></span>

## 澶栭儴璇佷功鍏煎閰嶇疆鎵嬪唽

### 璇佷功鍑嗗

* **澶栭儴璇佷功**

  濡傛灉闇€瑕佷娇鐢ㄧ涓夋柟澶栭儴璇佷功锛屽嵆涓嶆槸闀垮畨閾綜A锛坈hainmaker-ca锛夊拰闀垮畨閾捐瘉涔︾敓鎴愬伐鍏凤紙chainmaker-cryptogen锛夌敓鎴愮殑X.509鏍囧噯鐨勬暟瀛楄瘉涔︼紝渚嬪锛岀敱BJCA绛惧彂鐨勮瘉涔︼紝闇€瑕佸噯澶囧ソ绗笁鏂瑰閮ㄨ瘉涔︺€�
  
* **鍐呴儴璇佷功**

  闇€瑕佸噯澶囩敱闀垮畨閾綜A鎴栬€呴暱瀹夐摼璇佷功鐢熸垚宸ュ叿鐢熸垚鐨勮妭鐐筎LS閫氳璇佷功銆�
  
  浣跨敤闀垮畨閾綜A鍙傝€冿細[CA璇佷功鏈嶅姟浣跨敤鎵嬪唽](../tech/CA璇佷功鏈嶅姟.md)
  
  浣跨敤闀垮畨閾捐瘉涔︾敓鎴愬伐鍏峰弬鑰冿細[璇佷功鐢熸垚宸ュ叿](../instructions/璇佷功鐢熸垚宸ュ叿.md)

### 閰嶇疆鏂规硶

涓昏鏀寔涓ょ閰嶇疆鏂瑰紡

1. 閫氳繃閾鹃厤缃枃浠跺啓鍏enesis block銆�
2. 閫氳繃鍙戦€侀厤缃洿鏂颁氦鏄擄紝鏇存柊鍒伴摼涓娿€�

* 閾鹃厤缃枃浠舵柟寮�

  璇ユ柟寮忛渶瑕佷袱姝ワ紝棣栧厛鏇存敼閾鹃厤缃枃浠讹紝鍏舵鏇存柊鑺傜偣鎴栫敤鎴风殑璇佷功閰嶇疆銆�

  - 鍦╞c.yml閾鹃厤缃枃浠朵腑娣诲姞涓嬮潰閰嶇疆

  ```yaml
  trust_members:
    - member_info: "../BJCA/consensus.sign.crt"
      org_id: "wx-org1.chainmaker.org"
      role: "consensus"
      node_id:  "QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
    - member_info: "../BJCA/admin.sign.crt"
      org_id: "wx-org1.chainmaker.org"
      role: "admin"
      node_id:  ""
  ```

  1. **member_info**

     澶栭儴璇佷功鏂囦欢鐨勮矾寰�

  2. **org_id**

     澶栭儴璇佷功鍦ㄩ摼涓婄殑缁勭粐ID

  3. **role**

     澶栭儴璇佷功鍦ㄩ摼涓婄殑瑙掕壊銆傚彲濉細admin/client/consensus

  4. **node_id**

     褰撲娇鐢ㄧ殑澶栭儴璇佷功涓篶onsensus瑙掕壊鐨勭鍚嶈瘉涔︽椂锛岄渶瑕佸皢鍏辫瘑閰嶇疆涓殑node_id锛堝嵆璇ヨ妭鐐筎LS璇佷功鐨刵ode_id锛夊~鍐欏埌姝ゅ銆傦紙鍏跺畠鎯呭喌鍙拷鐣ヨ閰嶇疆椤癸級

     鍏辫瘑閰嶇疆濡備笅锛�

     ```yaml
     #鍏辫瘑閰嶇疆
     consensus:
       # 鍏辫瘑绫诲瀷(0-SOLO,1-TBFT,2-MBFT,3-HOTSTUFF,4-RAFT,10-POW)
       type: 1
       # 鍏辫瘑鑺傜偣鍒楄〃锛岀粍缁囧繀椤诲嚭鐜板湪trust_roots鐨刼rg_id涓紝姣忎釜缁勭粐鍙厤缃涓叡璇嗚妭鐐癸紝鑺傜偣鍦板潃閲囩敤libp2p鏍煎紡
       nodes:
         - org_id: "wx-org1.chainmaker.org"
           node_id:
             - "QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"
         - org_id: "wx-org2.chainmaker.org"
           node_id:
             - "QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"
     ```

  - 鑺傜偣璇佷功鏇挎崲涓哄閮ㄨ瘉涔︾殑鏂规硶

    鎵撳紑鑺傜偣閰嶇疆鏂囦欢chainmaker.yml鐨刵ode閮ㄥ垎

    ```yaml
    node:
      # 鑺傜偣绫诲瀷锛歠ull
      type:              full
      org_id:            {org_id}
      priv_key_file:     ../config/{org_path}/certs/{node_cert_path}.key
      cert_file:         ../config/{org_path}/certs/{node_cert_path}.crt
      signer_cache_size: 1000
      cert_cache_size:   1000
      pkcs11:
        enabled: false
        library:                # path to the so file of pkcs11 interface
        label:                  # label for the slot to be used
        password:               # password to logon the HSM
        session_cache_size: 10  # size of HSM session cache, default to 10
        hash: "SHA256"          # hash algorithm used to compute SKI
    ```

    1. priv_key_file 鏇挎崲鎴愬閮ㄨ瘉涔︾殑绉侀挜鏂囦欢璺緞
    2. cert_file 鏇挎崲鎴愬閮ㄨ瘉涔︾殑璇佷功鏂囦欢璺緞

* 鍙戦€侀厤缃洿鏂颁氦鏄撴柟寮�

  渚嬪锛屼娇鐢╟mc鍛戒护琛屽伐鍏锋搷浣�

  - 澧炲姞澶栭儴淇′换鎴愬憳淇℃伅
  
    ```sh
    ./cmc client chainconfig trustmember add \
    --sdk-conf-path=./testdata/sdk_config.yml \
    --org-id=wx-org1.chainmaker.org \
    --admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.crt \
    --admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.key \
    --trust-member-org-id=wx-org2.chainmaker.org \
    --trust-member-path=./testdata/trust-member-demo/node1-sign.pem \
    --trust-member-role=consensus \
    --trust-member-node-id=QmYcfSHGiXjHKkHo65YfxWLT6G7B81Zct7F7ep8GWFtuUK
    ```
    
    **鍙傛暟璇存槑**
    
    1. trust-member-org-id 澶栭儴璇佷功鍦ㄩ摼涓婄殑缁勭粐ID
    2. trust-member-path 澶栭儴璇佷功鏂囦欢鐨勮矾寰�
    3. trust-member-role 澶栭儴璇佷功鍦ㄩ摼涓婄殑瑙掕壊
    4. trust-member-node-id 褰撲娇鐢ㄧ殑澶栭儴璇佷功涓篶onsensus瑙掕壊鐨勭鍚嶈瘉涔︽椂锛岄渶瑕佸皢鍏辫瘑閰嶇疆涓殑node_id閰嶇疆鍒拌浣嶇疆銆�
    
  - 鍒犻櫎澶栭儴淇′换鎴愬憳淇℃伅
  
    ```sh
    ./cmc client chainconfig trustmember remove \
    --sdk-conf-path=./testdata/sdk_config.yml \
    --org-id=wx-org1.chainmaker.org \
    --admin-crt-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.crt,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.crt \
    --admin-key-file-paths=./testdata/crypto-config/wx-org1.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org2.chainmaker.org/user/admin1/admin1.sign.key,./testdata/crypto-config/wx-org3.chainmaker.org/user/admin1/admin1.sign.key \
    --trust-member-path=./testdata/trust-member-demo/node1-sign.pem \
    ```
    
    **鍙傛暟璇存槑**
    
    1. trust-member-path 澶栭儴璇佷功鏂囦欢鐨勮矾寰�

### 绀轰緥

鏈ず渚嬪熀浜庨摼鐜鎼缓鐨刐閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼](../recovery/閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼.md)閮ㄥ垎锛屾潵閰嶇疆node1鐨勭鍚嶈瘉涔︿负绗笁鏂瑰閮ㄨ瘉涔︺€�

* 閰嶇疆鍑嗗

  棣栧厛杩涘叆chainmaker-go鐩綍

  灏嗗閮ㄨ瘉涔︾洰褰晅rust-member鏀惧埌node1鑺傜偣璇佷功鐩綍涓�

  ```sh
  $ cd build/config/node1/certs
  $ tree
  ```

  ```sh
  鈹溾攢鈹€ ca
  鈹偮犅� 鈹溾攢鈹€ wx-org1.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹溾攢鈹€ wx-org2.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹溾攢鈹€ wx-org3.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹斺攢鈹€ wx-org4.chainmaker.org
  鈹偮犅�     鈹斺攢鈹€ ca.crt
  鈹溾攢鈹€ node
  鈹偮犅� 鈹溾攢鈹€ common1
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.nodeid
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.crt
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.key
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.tls.crt
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ common1.tls.key
  鈹偮犅� 鈹斺攢鈹€ consensus1
  鈹偮犅�     鈹溾攢鈹€ consensus1.nodeid
  鈹偮犅�     鈹溾攢鈹€ consensus1.sign.crt
  鈹偮犅�     鈹溾攢鈹€ consensus1.sign.key
  鈹偮犅�     鈹溾攢鈹€ consensus1.tls.crt
  鈹偮犅�     鈹斺攢鈹€ consensus1.tls.key
  鈹溾攢鈹€ trust-member
  鈹偮犅� 鈹溾攢鈹€ trust-member.node1-sign.key
  鈹偮犅� 鈹斺攢鈹€ trust-member.node1-sign.pem
  鈹斺攢鈹€ user
      鈹溾攢鈹€ admin1
      鈹偮犅� 鈹溾攢鈹€ admin1.sign.crt
      鈹偮犅� 鈹溾攢鈹€ admin1.sign.key
      鈹偮犅� 鈹溾攢鈹€ admin1.tls.crt
      鈹偮犅� 鈹斺攢鈹€ admin1.tls.key
      鈹斺攢鈹€ client1
          鈹溾攢鈹€ client1.addr
          鈹溾攢鈹€ client1.sign.crt
          鈹溾攢鈹€ client1.sign.key
          鈹溾攢鈹€ client1.tls.crt
          鈹斺攢鈹€ client1.tls.key
  ```

  鐒跺悗鍏跺畠鑺傜偣闇€瑕佸皢绗笁鏂硅瘉涔︽斁鍏ヨ瘉涔︾洰褰曘€�

  ```sh
  $ cd build/config
  $ tree
  ```

  ```sh
  鈹溾攢鈹€ node1
  鈹偮犅� 鈹溾攢鈹€ certs
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org1.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org2.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org3.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ wx-org4.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.nodeid
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.key
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.tls.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ common1.tls.key
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ consensus1
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.nodeid
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.key
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.tls.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ consensus1.tls.key
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ trust-member
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ trust-member.node1-sign.key
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ trust-member.node1-sign.pem
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
  鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ admin1
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.crt
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.key
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.tls.crt
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹斺攢鈹€ admin1.tls.key
  鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ client1
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.addr
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.sign.crt
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.sign.key
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.tls.crt
  鈹偮犅� 鈹偮犅�         鈹斺攢鈹€ client1.tls.key
  鈹偮犅� 鈹溾攢鈹€ chainconfig
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ bc1.yml
  鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
  鈹偮犅� 鈹斺攢鈹€ log.yml
  鈹溾攢鈹€ node2
  鈹偮犅� 鈹溾攢鈹€ certs
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org1.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org2.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org3.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ wx-org4.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.nodeid
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.key
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.tls.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ common1.tls.key
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ consensus1
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.nodeid
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.key
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.tls.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ consensus1.tls.key
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ trust-member
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ trust-member.node1-sign.pem
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
  鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ admin1
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.crt
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.key
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.tls.crt
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹斺攢鈹€ admin1.tls.key
  鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ client1
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.addr
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.sign.crt
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.sign.key
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.tls.crt
  鈹偮犅� 鈹偮犅�         鈹斺攢鈹€ client1.tls.key
  鈹偮犅� 鈹溾攢鈹€ chainconfig
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ bc1.yml
  鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
  鈹偮犅� 鈹斺攢鈹€ log.yml
  鈹溾攢鈹€ node3
  鈹偮犅� 鈹溾攢鈹€ certs
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org1.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org2.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org3.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ wx-org4.chainmaker.org
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ ca.crt
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.nodeid
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.key
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.tls.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ common1.tls.key
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ consensus1
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.nodeid
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.key
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.tls.crt
  鈹偮犅� 鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ consensus1.tls.key
  鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ trust-member
  鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ trust-member.node1-sign.pem
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
  鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ admin1
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.crt
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.key
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.tls.crt
  鈹偮犅� 鈹偮犅�     鈹偮犅� 鈹斺攢鈹€ admin1.tls.key
  鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ client1
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.addr
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.sign.crt
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.sign.key
  鈹偮犅� 鈹偮犅�         鈹溾攢鈹€ client1.tls.crt
  鈹偮犅� 鈹偮犅�         鈹斺攢鈹€ client1.tls.key
  鈹偮犅� 鈹溾攢鈹€ chainconfig
  鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ bc1.yml
  鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
  鈹偮犅� 鈹斺攢鈹€ log.yml
  鈹斺攢鈹€ node4
      鈹溾攢鈹€ certs
      鈹偮犅� 鈹溾攢鈹€ ca
      鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org1.chainmaker.org
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
      鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org2.chainmaker.org
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
      鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ wx-org3.chainmaker.org
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ ca.crt
      鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ wx-org4.chainmaker.org
      鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ ca.crt
      鈹偮犅� 鈹溾攢鈹€ node
      鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.nodeid
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.crt
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.sign.key
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ common1.tls.crt
      鈹偮犅� 鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ common1.tls.key
      鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ consensus1
      鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.nodeid
      鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.crt
      鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.sign.key
      鈹偮犅� 鈹偮犅�     鈹溾攢鈹€ consensus1.tls.crt
      鈹偮犅� 鈹偮犅�     鈹斺攢鈹€ consensus1.tls.key
      鈹偮犅� 鈹溾攢鈹€ trust-member
      鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ trust-member.node1-sign.pem
      鈹偮犅� 鈹斺攢鈹€ user
      鈹偮犅�     鈹溾攢鈹€ admin1
      鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.crt
      鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.sign.key
      鈹偮犅�     鈹偮犅� 鈹溾攢鈹€ admin1.tls.crt
      鈹偮犅�     鈹偮犅� 鈹斺攢鈹€ admin1.tls.key
      鈹偮犅�     鈹斺攢鈹€ client1
      鈹偮犅�         鈹溾攢鈹€ client1.addr
      鈹偮犅�         鈹溾攢鈹€ client1.sign.crt
      鈹偮犅�         鈹溾攢鈹€ client1.sign.key
      鈹偮犅�         鈹溾攢鈹€ client1.tls.crt
      鈹偮犅�         鈹斺攢鈹€ client1.tls.key
      鈹溾攢鈹€ chainconfig
      鈹偮犅� 鈹斺攢鈹€ bc1.yml
      鈹溾攢鈹€ chainmaker.yml
      鈹斺攢鈹€ log.yml
  ```

  node1閾鹃厤缃産c1.yml 

  ```yaml
  chain_id: chain1        # 閾炬爣璇�
  version: v2.0.0         # 閾剧増鏈�
  sequence: 1             # 閰嶇疆鐗堟湰
  auth_type: "identity"   # 璁よ瘉绫诲瀷
  
  crypto:
    hash: SHA256
  
  # 鍚堢害鏀寔绫诲瀷鐨勯厤缃�
  contract:
    enable_sql_support: false # 鍚堢害鏄惁鏀寔sql锛屾澶勮嫢涓簍rue锛屽垯chainmaker.yml涓垯闇€閰嶇疆storage.statedb_config.provider=sql锛屽惁鍒欐棤娉曞惎鍔�
  
  # 浜ゆ槗銆佸尯鍧楃浉鍏抽厤缃�
  block:
    tx_timestamp_verify: true # 鏄惁闇€瑕佸紑鍚氦鏄撴椂闂存埑鏍¢獙
    tx_timeout: 600  # 浜ゆ槗鏃堕棿鎴崇殑杩囨湡鏃堕棿(绉�)
    block_tx_capacity: 100  # 鍖哄潡涓渶澶т氦鏄撴暟
    block_size: 10  # 鍖哄潡鏈€澶ч檺鍒讹紝鍗曚綅MB
    block_interval: 2000 # 鍑哄潡闂撮殧锛屽崟浣�:ms
  
  # core妯″潡
  core:
    tx_scheduler_timeout: 10 #  [0, 60] 浜ゆ槗璋冨害鍣ㄤ粠浜ゆ槗姹犳嬁鍒颁氦鏄撳悗, 杩涜璋冨害鐨勬椂闂�
    tx_scheduler_validate_timeout: 10 # [0, 60] 浜ゆ槗璋冨害鍣ㄤ粠鍖哄潡涓嬁鍒颁氦鏄撳悗, 杩涜楠岃瘉鐨勮秴鏃舵椂闂�
  
  # snapshot module
  snapshot:
    enable_evidence: false # enable the evidence support
  
  # scheduler module
  scheduler:
    enable_evidence: false # enable the evidence support
  
  #鍏辫瘑閰嶇疆
  consensus:
    # 鍏辫瘑绫诲瀷(0-SOLO,1-TBFT,2-MBFT,3-HOTSTUFF,4-RAFT,5-DPOS,10-POW)
    type: 1
    # 鍏辫瘑鑺傜偣鍒楄〃锛岀粍缁囧繀椤诲嚭鐜板湪trust_roots鐨刼rg_id涓紝姣忎釜缁勭粐鍙厤缃涓叡璇嗚妭鐐癸紝鑺傜偣鍦板潃閲囩敤libp2p鏍煎紡
    # 鍏朵腑node_id涓篶hainmaker.yml涓� node.cert_file璇佷功瀵瑰簲鐨刵odeid
    nodes:
      - org_id: "wx-org1.chainmaker.org"
        node_id:
          - "QmTfgpaCgZUGHmgzzJ6AhyU7WnDmNt9xHk9acSkaa5KJdp"
      - org_id: "wx-org2.chainmaker.org"
        node_id:
          - "QmTrbCNfbMcQHJhPrrbjfnAmh29HEGhYc2MoKNR5xPrdkS"
      - org_id: "wx-org3.chainmaker.org"
        node_id:
          - "QmRALrNH4ZXwxCGLH5mEvcoqdLF6C7umfFNNpyo9hRaVWW"
      - org_id: "wx-org4.chainmaker.org"
        node_id:
          - "QmUp3jyBxcDERaf5vcnJsTpqSNTkRLu9bMRQzjjynzRjZZ"
  
    ext_config: # 鎵╁睍瀛楁锛岃褰曢毦搴︺€佸鍔辩瓑鍏朵粬绫诲叡璇嗙畻娉曢厤缃�
      - key: aa
        value: chain01_ext11
    dpos_config: # DPoS
      #ERC20鍚堢害閰嶇疆
      - key: erc20.total
        value: "{erc20_total}"
      - key: erc20.owner
        value: "{org1_peeraddr}"
      - key: erc20.decimals
        value: "18"
      - key: erc20.account:DPOS_STAKE
        value: "{erc20_total}"
      #Stake鍚堢害閰嶇疆
      - key: stake.minSelfDelegation
        value: "2500000"
      - key: stake.epochValidatorNum
        value: "{epochValidatorNum}"
      - key: stake.epochBlockNum
        value: "10"
      - key: stake.completionUnbondingEpochNum
        value: "1"
      - key: stake.candidate:{org1_peeraddr}
        value: "2500000"
      - key: stake.candidate:{org2_peeraddr}
        value: "2500000"
      - key: stake.candidate:{org3_peeraddr}
        value: "2500000"
      - key: stake.candidate:{org4_peeraddr}
        value: "2500000"
  
      - key: stake.nodeID:{org1_peeraddr}
        value: "QmTfgpaCgZUGHmgzzJ6AhyU7WnDmNt9xHk9acSkaa5KJdp"
      - key: stake.nodeID:{org2_peeraddr}
        value: "QmTrbCNfbMcQHJhPrrbjfnAmh29HEGhYc2MoKNR5xPrdkS"
      - key: stake.nodeID:{org3_peeraddr}
        value: "QmRALrNH4ZXwxCGLH5mEvcoqdLF6C7umfFNNpyo9hRaVWW"
      - key: stake.nodeID:{org4_peeraddr}
        value: "QmUp3jyBxcDERaf5vcnJsTpqSNTkRLu9bMRQzjjynzRjZZ"
  
  # 淇′换缁勭粐鍜屾牴璇佷功
  trust_roots:
    - org_id: "wx-org1.chainmaker.org"
      root:
        - "../config/wx-org1.chainmaker.org/certs/ca/wx-org1.chainmaker.org/ca.crt"
    - org_id: "wx-org2.chainmaker.org"
      root:
        - "../config/wx-org1.chainmaker.org/certs/ca/wx-org2.chainmaker.org/ca.crt"
    - org_id: "wx-org3.chainmaker.org"
      root:
        - "../config/wx-org1.chainmaker.org/certs/ca/wx-org3.chainmaker.org/ca.crt"
    - org_id: "wx-org4.chainmaker.org"
      root:
        - "../config/wx-org1.chainmaker.org/certs/ca/wx-org4.chainmaker.org/ca.crt"
  
  # 璇佷功搴�
  trust_members:
    - member_info: "../config/wx-org1.chainmaker.org/certs/trust-member/trust-member.node1-sign.pem"
      org_id: "wx-org1.chainmaker.org"
      role: "consensus"
      node_id:  "QmTfgpaCgZUGHmgzzJ6AhyU7WnDmNt9xHk9acSkaa5KJdp"
  
  # 鏉冮檺閰嶇疆锛堝彧鑳芥暣浣撴坊鍔犮€佷慨鏀广€佸垹闄わ級
  resource_policies:
    - resource_name: CHAIN_CONFIG-NODE_ID_UPDATE
      policy:
        rule: SELF # 瑙勫垯锛圓NY锛孧AJORITY...锛屽叏閮ㄥぇ鍐欙紝鑷姩杞ぇ鍐欙級
        org_list: # 缁勭粐鍚嶇О锛堢粍缁囧悕绉帮紝鍖哄垎澶у皬鍐欙級
        role_list: # 瑙掕壊鍚嶇О锛坮ole锛岃嚜鍔ㄨ浆澶у啓锛�
          - admin
    - resource_name: CHAIN_CONFIG-TRUST_ROOT_ADD
      policy:
        rule: MAJORITY
        org_list:
        role_list:
          - admin
    - resource_name: CHAIN_CONFIG-CERTS_FREEZE
      policy:
        rule: ANY
        org_list:
        role_list:
          - admin
  ```

  node2鐨勯摼閰嶇疆bc1.yml 锛堜粎鏄剧ずtrust_member閮ㄥ垎锛屽叾瀹冮儴鍒嗕笉鍙橈級

  ```yaml
  trust_members:
    - member_info: "../config/wx-org2.chainmaker.org/certs/trust-member/trust-member.node1-sign.pem"
      org_id: "wx-org1.chainmaker.org"
      role: "consensus"
      node_id:  "QmTfgpaCgZUGHmgzzJ6AhyU7WnDmNt9xHk9acSkaa5KJdp"
  ```

  node3鐨勯摼閰嶇疆bc1.yml 锛堜粎鏄剧ずtrust_member閮ㄥ垎锛屽叾瀹冮儴鍒嗕笉鍙橈級

  ```yaml
  trust_members:
    - member_info: "../config/wx-org3.chainmaker.org/certs/trust-member/trust-member.node1-sign.pem"
      org_id: "wx-org1.chainmaker.org"
      role: "consensus"
      node_id:  "QmTfgpaCgZUGHmgzzJ6AhyU7WnDmNt9xHk9acSkaa5KJdp"
  ```

  node4鐨勯摼閰嶇疆bc1.yml 锛堜粎鏄剧ずtrust_member閮ㄥ垎锛屽叾瀹冮儴鍒嗕笉鍙橈級

  ```yaml
  trust_members:
    - member_info: "../config/wx-org4.chainmaker.org/certs/trust-member/trust-member.node1-sign.pem"
      org_id: "wx-org1.chainmaker.org"
      role: "consensus"
      node_id:  "QmTfgpaCgZUGHmgzzJ6AhyU7WnDmNt9xHk9acSkaa5KJdp"
  ```

  node1鐨勮妭鐐归厤缃枃浠禼hainmaker.yml

  ```yaml
  log:
    config_file: ../config/wx-org1.chainmaker.org/log.yml          # config file of logger configuration.
  
  blockchain:
    - chainId: chain1
      genesis: ../config/wx-org1.chainmaker.org/chainconfig/bc1.yml
  
  node:
    # 鑺傜偣绫诲瀷锛歠ull
    type:              full
    org_id:            wx-org1.chainmaker.org
  #  priv_key_file: ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.sign.key
  #  cert_file: ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.sign.crt
    priv_key_file: ../config/wx-org1.chainmaker.org/certs/trust-member/trust-member.node1-sign.key
    cert_file: ../config/wx-org1.chainmaker.org/certs/trust-member/trust-member.node1-sign.pem
    signer_cache_size: 1000
    cert_cache_size:   1000
    pkcs11:
      enabled: false
      library: # path to the so file of pkcs11 interface
      label: # label for the slot to be used
      password: # password to logon the HSM
      session_cache_size: 10 # size of HSM session cache, default to 10
      hash: "SHA256" # hash algorithm used to compute SKI
  
  net:
    provider: LibP2P
    listen_addr: /ip4/0.0.0.0/tcp/11301
    seeds:
      - "/ip4/127.0.0.1/tcp/11301/p2p/QmTfgpaCgZUGHmgzzJ6AhyU7WnDmNt9xHk9acSkaa5KJdp"
      - "/ip4/127.0.0.1/tcp/11302/p2p/QmTrbCNfbMcQHJhPrrbjfnAmh29HEGhYc2MoKNR5xPrdkS"
      - "/ip4/127.0.0.1/tcp/11303/p2p/QmRALrNH4ZXwxCGLH5mEvcoqdLF6C7umfFNNpyo9hRaVWW"
      - "/ip4/127.0.0.1/tcp/11304/p2p/QmUp3jyBxcDERaf5vcnJsTpqSNTkRLu9bMRQzjjynzRjZZ"
  
    tls:
      enabled: true
      priv_key_file: ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.tls.key
      cert_file: ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.tls.crt
      
  
  txpool:
    max_txpool_size: 50000 # 鏅€氫氦鏄撴睜涓婇檺
    max_config_txpool_size: 10 # config浜ゆ槗姹犵殑涓婇檺
    full_notify_again_time: 30 # 浜ゆ槗姹犳孩鍑哄悗锛屽啀娆¢€氱煡鐨勬椂闂撮棿闅�(绉�)
  #  pool_type: "batch"  # single/batch锛歴ingle瀹炴椂杩涘叆浜ゆ槗姹狅紝batch鎵归噺杩涘叆浜ゆ槗姹�
  #  batch_max_size: 30000 # 鎵规鏈€澶уぇ灏�
  #  batch_create_timeout: 200 # 鍒涘缓鎵规瓒呮椂鏃堕棿锛屽崟浣嶆绉�
  
  rpc:
    provider: grpc
    port: 12301
    # 妫€鏌ラ摼閰嶇疆TrustRoots璇佷功鍙樺寲鏃堕棿闂撮殧锛屽崟浣嶏細s锛屾渶灏忓€间负10s
    check_chain_conf_trust_roots_change_interval: 60
    ratelimit:
      # 姣忕琛ュ厖浠ょ墝鏁帮紝鍙栧€硷細-1-涓嶅彈闄愶紱0-榛樿鍊硷紙10000锛�
      token_per_second: -1
      # 浠ょ墝妗跺ぇ灏忥紝鍙栧€硷細-1-涓嶅彈闄愶紱0-榛樿鍊硷紙10000锛�
      token_bucket_size: -1
    subscriber:
      # 鍘嗗彶娑堟伅璁㈤槄娴佹帶锛屽疄鏃舵秷鎭闃呬笉浼氳繘琛屾祦鎺�
      ratelimit:
        # 姣忕琛ュ厖浠ょ墝鏁帮紝鍙栧€硷細-1-涓嶅彈闄愶紱0-榛樿鍊硷紙1000锛�
        token_per_second: 100
        # 浠ょ墝妗跺ぇ灏忥紝鍙栧€硷細-1-涓嶅彈闄愶紱0-榛樿鍊硷紙1000锛�
        token_bucket_size: 100
    tls:
      # TLS妯″紡:
      #   disable - 涓嶅惎鐢═LS
      #   oneway  - 鍗曞悜璁よ瘉
      #   twoway  - 鍙屽悜璁よ瘉
      #mode: disable
      #mode: oneway
      mode:           twoway
      priv_key_file:  ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.tls.key
      cert_file:      ../config/wx-org1.chainmaker.org/certs/node/consensus1/consensus1.tls.crt
  
  monitor:
    enabled: true
    port: 14321
  
  pprof:
    enabled: false
    port: 24321
  
  
  storage:
    store_path: ../data/wx-org1.chainmaker.org/ledgerData1
    # 鏈€灏忕殑涓嶅厑璁稿綊妗g殑鍖哄潡楂樺害
    unarchive_block_height: 300000
    blockdb_config:
      provider: leveldb
      leveldb_config:
        store_path: ../data/wx-org1.chainmaker.org/blocks
    statedb_config:
      provider: leveldb # leveldb/sql 浜岄€変竴
      leveldb_config: # leveldb config
        store_path: ../data/wx-org1.chainmaker.org/state
    #    sqldb_config: # sql config锛屽彧鏈塸rovider涓簊ql鐨勬椂鍊欐墠闇€瑕侀厤缃拰鍚敤杩欎釜閰嶇疆
    #      sqldb_type: mysql           #鍏蜂綋鐨剆ql db绫诲瀷锛岀洰鍓嶆敮鎸乵ysql锛宻qlite
    #      dsn: root:password@tcp(127.0.0.1:3306)/  #mysql鐨勮繛鎺ヤ俊鎭紝鍖呮嫭鐢ㄦ埛鍚嶃€佸瘑鐮併€乮p銆乸ort绛夛紝绀轰緥锛歳oot:admin@tcp(127.0.0.1:3306)/
    historydb_config:
      provider: leveldb
      leveldb_config:
        store_path: ../data/wx-org1.chainmaker.org/history
    resultdb_config:
      provider: leveldb
      leveldb_config:
        store_path: ../data/wx-org1.chainmaker.org/result
    disable_contract_eventdb: true  #鏄惁绂佹鍚堢害浜嬩欢瀛樺偍鍔熻兘锛岄粯璁や负true锛屽鏋滆缃负false,闇€瑕侀厤缃甿ysql
    contract_eventdb_config:
      provider: sql                 #濡傛灉寮€鍚痗ontract event db 鍔熻兘锛岄渶瑕佹寚瀹歱rovider涓簊ql
      sqldb_config:
        sqldb_type: mysql           #contract event db 鍙敮鎸乵ysql
        dsn: root:password@tcp(127.0.0.1:3306)/  #mysql鐨勮繛鎺ヤ俊鎭紝鍖呮嫭鐢ㄦ埛鍚嶃€佸瘑鐮併€乮p銆乸ort绛夛紝绀轰緥锛歳oot:admin@tcp(127.0.0.1:3306)/
  core:
    evidence: false
  scheduler:
    rwset_log: false #whether log the txRWSet map in the debug mode
  ```

* 閾惧惎鍔�

  ```sh
  $ cd scripts
  $ ./build_release.sh
  $ ./cluster_quick_start.sh normal
  ```

  鏌ョ湅杩涚▼鏄惁瀛樺湪

  ```sh
  $ ps -ef|grep chainmaker | grep -v grep
  lxf       20816      1  8 15:34 pts/0    00:00:01 ./chainmaker start -c ../config/wx-org1.chainmaker.org/chainmaker.yml
  lxf       20835      1  8 15:34 pts/0    00:00:00 ./chainmaker start -c ../config/wx-org2.chainmaker.org/chainmaker.yml
  lxf       20855      1  9 15:34 pts/0    00:00:00 ./chainmaker start -c ../config/wx-org3.chainmaker.org/chainmaker.yml
  lxf       20874      1 10 15:34 pts/0    00:00:00 ./chainmaker start -c ../config/wx-org4.chainmaker.org/chainmaker.yml
  ```

  鏌ョ湅绔彛鏄惁鐩戝惉

  ```sh
   $ netstat -lptn | grep 1230
  tcp6       0      0 :::12301                :::*                    LISTEN      20816/./chainmaker  
  tcp6       0      0 :::12302                :::*                    LISTEN      20835/./chainmaker  
  tcp6       0      0 :::12303                :::*                    LISTEN      20855/./chainmaker  
  tcp6       0      0 :::12304                :::*                    LISTEN      20874/./chainmaker
  ```