# 如何给快到期的证书续期 本章节将要说明如何给快到期的证书续期、更新链上信息,此处包括:节点证书、trustRoot证书、用户证书 > tips: 操作前,最好先备份data和config目录 ## 证书替换流程 1. 续期各个证书:ca、 node、admin、client证书 2. 校验生成的证书正确性 3. 停止当前链 4. 备份data config 5. 替换node、admin、client证书 6. —————— 7. 启动链 8. 发交易删除过期组织1的共识节点ID 9. 发交易删除过期组织1的共识节点 10. 发交易删除过期组织1的trustRoot(ca) 11. 发交易添加续期组织1的trustRoot(ca) 12. 发交易添加续期组织1的共识节点 13. 8-12循环执行直到替换掉所有的组织 ### 用户证书 - 普通用户证书无需特殊操作。直接使用新续期的证书发交易即可。 - 若使用证书别名上链,需要先执行别名更新或者别名删除后重新别名上链。参考:长安链CMC命令行工具的:[证书别名章节](../dev/命令行工具.html#alias) > tips: 新旧证书的地址是一样的,可通过cmc命令验证: `./cmc address cert-to-addr /client.sign.crt` ### 节点证书 因证书续期node id、key不会更改,故只需要将`chainmaker.yml`中的node.cert_file, net.tls.cert_file, rpc.tls.cert_file3个证书文件替换。然后重启该节点即可。 同步节点、共识节点均一样的操作。 > tips: 新旧节点证书nodeid查看方式: ./cmc cert nid --node-cert-path xxx.tls.crt > > 注意:nodeid指的是tls证书: xxx.tls.crt ### trustRoot ca证书 直接使用旧的管理员签名,发送根证书更新交易即可更新,需要一个组织一个组织更新。也可以将组织的CA删除掉再重新添加。 如果当前链上仅有一个组织,也是使用旧的管理员签名即可更新。不可删除再新增。 参考:[证书根证书更新](../dev/命令行工具.html#chainConfig.updateOrgRootCA) ## 证书续期的方式 ### 通过openssl续期 cat renew.sh ```sh #!/bin/bash inkey=$1 incrt=$2 cakey=$3 cacrt=$4 # 根据证书和key计算csr echo "[get csr]" openssl x509 -x509toreq -sha256 -in $incrt -out tmp.csr -signkey $inkey # 根据csr使用ca key重新签发新证书 echo echo "[renew]" openssl x509 -req -sha256 -days 365 -in tmp.csr -out new$incrt -CAkey $cakey -CA $cacrt -CAcreateserial # 校验新证书 echo echo "[verify]" openssl verify -CAfile $cacrt new$incrt ``` 使用方式如下: 新证书文件名为: "new" + crtName ```sh # 节点证书 ./renew.sh common1.tls.key common1.tls.crt ../ca/ca.key ../ca/ca.crt # 用户证书 ./renew.sh client1.tls.key client1.tls.crt ca.key ca.crt # trustRoot ca证书 ./renew.sh ca.key ca.crt ca.key ca.crt # 注意最后一步校验需要换成使用新CA证书,校验旧节点/用户证书 openssl verify -CAfile ca.new.crt common1.sign.new.crt ``` ### 通过CA-service续期 直接调用延期证书接口即可。`/api/ca/renewcert` 参考:[ca-service](../dev/CA证书服务)