#管理证书
# 生成证书
# SSL相关证书
用于配置SSL可信信道(客户端<->服务器SSL可信信道、主备复制网络可信信道或DIN可信信道)的证书文件清单如下,需记录相应的文件名和路径。
| 证书文件 | 用途 | 文件名示例 |
|---|---|---|
| 服务器证书 | 提供服务器身份证明,包含服务器的公钥和身份信息 服务端配置所需,对应数据库参数SSL_CERT_FILE | server.crt |
| 服务器私钥 | 用于执行加密、解密、签名等核心安全操作 服务端配置所需,对应数据库参数SSL_KEY_FILE | server.key |
| DH参数文件 | Diffie-Hellman参数文件,为前向保密提供大素数和生成器参数 服务端配置所需,对应数据库参数SSL_DH_PARAM_FILE | dhparam.pem |
| CA根证书 | 作为所有证书验证的最终依据,验证整个证书链的有效性 客户端配置所需,对应参数ssl_root_cer | root.crt |
# 前提条件
生成SSL相关证书需使用OpenSSL工具,请先参照依赖项准备检查并确保服务器系统中已安装符合要求的工具。
在某台数据库服务器上规划并创建证书文件的存放路径,YashanDB的安装用户(即yashan)需具备对应路径的全部权限,本文以规划在/data/yashan/ssl路径为例。
$ cd /data/yashan $ mkdir ssl
# 操作步骤
以下步骤中的工具命令选项、路径、名称等无限制,用户可依据自身环境和需要替换为其他值。
以安装用户登录数据库安装服务器。
生成根证书(自签名,包含服务器公钥):
$ cd /data/yashan/ssl $ openssl req -new -x509 -days 365 -nodes -out root.crt -keyout ca.key -subj "/CN=RootCA"生成根证书请求文件和服务器私钥:
$ openssl req -new -nodes -text \ -out server.csr \ -keyout server.key \ -subj "/CN=server"生成服务器证书并签名:
$ openssl x509 -req -in server.csr -text -days 5 \ -CA root.crt \ -CAkey ca.key \ -CAcreateserial \ -out server.crt生成DH参数文件:
$ openssl dhparam -2 -out dhparam.pem -text 2048
# TLCP相关证书
用于配置客户端<->服务端TLCP可信信道的证书文件清单如下,需记录相应的文件名和路径。
| 证书文件 | 用途 | 文件名示例 |
|---|---|---|
| TLCP双证书合并文件 | 单一文件包含所有必要证书:服务器签名证书、加密证书和CA证书链,可简化证书管理 服务端配置所需,对应数据库参数TLCP_CERT_FILE | double_certs.pem |
| 服务器签名私钥 | 用于服务器身份签名操作,在TLS握手过程中对消息进行数字签名,需要TLCP私钥密码文件中的TLCP_SIGN_PASS进行解密 服务端配置所需,对应数据库参数TLCP_SIGNKEY_FILE | signkey.pem |
| 服务器加密私钥 | 用于服务器数据解密操作,在密钥交换过程中解密客户端发送的预主密钥,需要TLCP私钥密码文件中的TLCP_ENC_PASS进行解密 服务端配置所需,对应数据库参数TLCP_ENCKEY_FILE | enckey.pem |
| 二级CA证书 | 作为证书链的中间环节,用于签发服务器和客户端证书,也在TLCP双证书合并文件中作为证书链的一部分 服务端配置所需,对应数据库参数TLCP_CACERT_FILE | cacert.pem |
| TLCP私钥密码文件 | 存储服务器签名私钥和加密私钥的解密密码,提供安全的密码管理机制 服务端配置所需,对应数据库参数TLCP_PASS_FILE | tlcpPass |
| CA根证书 | 作为整个证书链的信任根,可签发下级证书 客户端配置所需,对应参数TLCP_CACERT_FILE | rootcacert.pem |
| 客户端签名证书 | TLCP双向认证中的客户端证书,是客户端的身份证明 客户端配置所需,对应参数TLCP_CERT_FILE | clientcert.pem |
| 客户端签名私钥 | 用于客户端身份签名操作,TLS握手过程中客户端证书签名验证,需使用生成文件时指定的密码进行解密 客户端配置所需,对应参数TLCP_CLIENT_KEY_FILE | clientkey.pem |
# 前提条件
生成证书需使用GmSSL工具,请先参照依赖项准备检查并确保服务器系统中已安装符合要求的工具。
在某台数据库服务器上规划并创建证书文件的存放路径,YashanDB的安装用户(即yashan)需具备对应路径的全部权限,本文以规划在/data/yashan/tlcp路径为例。
$ cd /data/yashan $ mkdir tlcp
# 操作步骤
以下步骤中的工具命令选项、路径、名称等无限制,用户可依据自身环境和需要替换为其他值。
生成服务器证书:
)生成CA根证书。
$ cd /data/yashan/tlcp $ gmssl sm2keygen -pass 1234 -out rootcakey.pem $ gmssl certgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN ROOTCA \ -days 3650 -key rootcakey.pem -pass 1234 -out rootcacert.pem \ -key_usage keyCertSign -key_usage cRLSign -ca $ gmssl certparse -in rootcacert.pem)生成二级CA证书。
$ gmssl sm2keygen -pass 1234 -out cakey.pem $ gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN "Sub CA" -key cakey.pem -pass 1234 -out careq.pem $ gmssl reqsign -in careq.pem -days 365 -key_usage keyCertSign \ -path_len_constraint 0 -cacert rootcacert.pem \ -key rootcakey.pem -pass 1234 -out cacert.pem -ca $ gmssl certparse -in cacert.pem)使用CA证书签发服务器签名证书。
$ gmssl sm2keygen -pass 1234 -out signkey.pem $ gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost \ -key signkey.pem -pass 1234 -out signreq.pem $ gmssl reqsign -in signreq.pem -days 365 -key_usage digitalSignature -cacert cacert.pem \ -key cakey.pem -pass 1234 -out signcert.pem $ gmssl certparse -in signcert.pem)使用CA证书签发服务器加密证书。
$ gmssl sm2keygen -pass 1234 -out enckey.pem $ gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN localhost -key enckey.pem -pass 1234 -out encreq.pem $ gmssl reqsign -in encreq.pem -days 365 -key_usage keyEncipherment -cacert cacert.pem -key cakey.pem -pass 1234 -out enccert.pem $ gmssl certparse -in enccert.pem)合并服务器签名证书、服务器加密证书和CA证书链,生成TLCP双证书合并文件。
# 必须严格按照签名→加密→CA的顺序 $ cat signcert.pem > double_certs.pem $ cat enccert.pem >> double_certs.pem $ cat cacert.pem >> double_certs.pem
生成客户端证书。
# 生成客户端签名私钥文件 $ gmssl sm2keygen -pass 1234 -out clientkey.pem # 生成客户端证书签名请求文件 $ gmssl reqgen -C CN -ST Beijing -L Haidian -O PKU -OU CS -CN Client -key clientkey.pem -pass 1234 -out clientreq.pem # 生成并解析客户端签名证书文件 $ gmssl reqsign -in clientreq.pem -days 365 -key_usage digitalSignature \ -cacert cacert.pem -key cakey.pem \ -pass 1234 -out clientcert.pem $ gmssl certparse -in clientcert.pem生成TLCP私钥密码文件。
$ vi tlcpPass TLCP_ENC_PASS = 1234 # 服务器加密私钥的解密密码 TLCP_SIGN_PASS = 1234 # 服务器签名私钥的解密密码
# 证书过期替换
在证书临近过期前,应及时生成新的证书文件。
在原目录重新生成证书,替换旧文件。
将新的证书文件下载至客户端所在设备的证书存放路径,替换旧文件。

