---
# System prepended metadata

title: ErhaiChain TLS 使用说明文档

---

# ErhaiChain TLS 使用说明文档

## 一. 概述
`erhai`链对外部应用提供了`RPC`和`REST`服务，用于查询数据和与区块链进行交互。默认情况下都是`HTTP`协议。基于联盟链安全考虑，可以将其配置为`TLS`安全传输层协议进行通信，并且在使用国密算法`sm2`时可以配置服务端客户端双向TLS校验。

## 二. 配置说明
### 1. RPC开启TLS(26657端口)
```
//修改$hcd_home/config/config.tmol文件，配置TLS的证书和私钥路径，
通常设置为该节点的节点私钥和证书
//config.toml
tls_cert_file = "node.crt"
tls_key_file = "node.key"
//若当前链使用国密算法，还需要设置GM-TLS配置为true，涉及下面2处配置文件
tls_gm = true
//$hcd_home/config/app.toml文件
gm-tls = "true"
```

<!-- 修改文件如下图所示： -->
<!-- ![](https://i.imgur.com/KyaXIVb.png) -->
<!-- ![](https://i.imgur.com/6TN19oP.png) -->
<!-- ![](https://i.imgur.com/LyEO7v6.png) -->
配置完成后，启动链出现如下日志打印则代表RPC服务TLS验证开启
![](https://i.imgur.com/cLhp62i.png)

### 2. REST开启TLS(1317端口)
```
1.修改$hcd_home/config/app.toml
cert-file = "/Users/kenny/Code/erhai-deploy/native/sm2/config/node.crt"  //设置为当前节点证书，绝对路径
key-file = "/Users/kenny/Code/erhai-deploy/native/sm2/config/node.key" //设置当前节点私钥，绝对路径
2.若当前节点使用国密算法，则还须修改
gm-tls = true
```

<!-- 5.修改文件如下图： -->
<!-- ![](https://i.imgur.com/Jtg3QGc.png) -->
开启REST的TLS成功后如下图所示
![](https://i.imgur.com/cS1cO1K.png)


### 3. REST开启国密双向TLS(1317端口)
`erhai`链支持配置在使用国密算法sm2时，开启1317端口的双向TLS验证，配置方式如下：
1.  首先完成上小节的配置步骤，REST开启TLS(1317端口)
2.  配置$hcd_home/config/app.toml
    a. enabled-mutual-tls = true //代表开启双向TLS
    b. client-ca-file = "/Users/kenny/Code/erhai-deploy/native/sm2/config/ca.crt" //设置客户端的CA证书，配置为该组织的根证书，为客户端签发TLS证书时候，必须用此证书作为CA证书，方可验证通过
    成功配置国密双向TLS后启动链会展示如下日志:
    ![](https://i.imgur.com/HPrul43.png)

    

## 三. 常见问题
###  tls密码算法和证书不匹配时
1.非国密证书匹配国密tls
![](https://i.imgur.com/fwkNuW2.png)
![](https://i.imgur.com/G5uh0rP.png)
![](https://i.imgur.com/PEAcXEJ.png)

2.国密证书匹配非国密tls
![](https://i.imgur.com/uTeGIF6.png)
![](https://i.imgur.com/NcqPzkz.png)
![](https://i.imgur.com/DkSl4SI.png)
![](https://i.imgur.com/Uri0RCo.png)




