KingbaseES 数据库提供了各种接口连接数据库进行加密传输的功能。在进行加密传输前,需对客户端以及服务端进行证书配置。
如果服务器要求一个可信的客户端证书, libkci 将发送用户主目录中 ~/.kingbase/kingbase.crt 文件存储的证书。该证书必须由一个受服务器信任的证书机构(CA)签发。也必须存在一个匹配的私钥文件 ~/.kingbase/kingbase.key。该私钥文件不允许全局或组用户的任何访问,可以通过命令 chmod 0600 ~/.kingbase/kingbase.key 实现。证书和密钥文件的位置可以使用连接参数sslcert 和 sslkey 或者环境变量 KCISSLCERT 和 KCISSLKEY 覆盖。
在一些情况下,客户端证书可以由” 中间” 证书机构签名,而不是由服务器直接信任的证书机构。要使用这样一个证书,将签发机构的证书加入到 kingbase.crt 文件,然后是它的上级机构的证书,并且一直到一个受服务器信任的证书机构(” 根” 机构或者” 中间” 机构),即由该服务器的 root.crt 文件中的一个证书签发。
注意: 客户端的 ~/.kingbase/root.crt 列出了被认为可信的能用于签发服务器证书的顶层 CA。原则上不需要列出签发客户端证书的 CA,大部分情况下这些 CA 也被信任可以用于服务器证书。
将客户端证书文件 kingbase8.crt、 kingbase8.key 以及 root.crt 拷贝放至客户端相应目录下。
数据库服务器配置
- 配置 kingbase.conf 文件:
ssl = on # (change requires restart)
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
# (change requires restart)
#ssl_prefer_server_ciphers = on # (change requires restart)
#ssl_ecdh_curve = 'prime256v1' # (change requires restart)
#ssl_cert_file = 'server.crt' # (change requires restart)
#ssl_key_file = 'server.key' # (change requires restart)
ssl_ca_file = 'root.crt ' # (change requires restart)
#ssl_crl_file = '' # (change requires restart)
2. 配置 sys_hba.conf 文件:
hostssl all all 0.0.0.0/0 md5 clientcert=1
3. 重启数据库服务器
客户端编程接口配置
KingbaseES 数据库的驱动都通过以下 4 个连接参数来配置 SSL 需要的参数:
• sslmode 配置证书验证方式,该参数支持 6 个值: disable(禁用 SSL)、 allow、 prefer、 require、 verify-ca、
verify-full。使用 verify-ca 会验证证书,使用 verify-full 模式会额外对主机名进行验证,使用 verify-ca 和 verifyfull 时,需要指定证书位置。
• sslrootcert 指定根证书文件的位置,如不指定, Linux 默认路径为”$HOME/.kingbase8/root.crt, Windows 默
认路径为”%APPDATA%\kingbase8\root.crt”,将服务器 data 目录下的 root.crt 放到对应的目录下即可。只有
verify-full 模式会对主机名进行验证。
• sslcert 配置客户端证书位置,如不指定, Linux 默认路径为”$HOME/.kingbase8/kingbase8.crt”, Windows 默
认路径为”%APPDATA%\kingbase8\kingbase8.crt”,将服务器 data 目录下的 kingbase8.crt 放到对应的目录下
即可。
• sslkey 配置私钥文件位置,如不指定, Linux 默认路径为”$HOME/.kingbase8/kingbase8.key”, Windows 默认
路径为”%APPDATA%\kingbase8\kingbase8.key”,将服务器 data 目录下的 kingbase8.key 放到对应的目录下
即可。
1. JDBC 配置示例:
jdbc:kingbase8://127.0.0.1:54321/test?sslmode=verify-ca&sslrootcert=/home/test/root.
crt&sslcert=/home/test/kingbase8.crt&sslkey=/home/test/kingbase8.pk8
2.DCI 配置示例:
在 sys_service.conf 文件中配置以下内容:
SSLmode=vc # 注 d - disable; a - allow; p - prefer; r - require; vc - verify-ca; vf - verify-full;
pgopt={sslrootcert=/home/wli/cert/root.crt sslcert=/home/wli/cert/kingbase8.crt sslkey=/home/wli/cert/
kingbase8.key}
- 服务端开启证书访问模式,API 以及客户端访问数据库时是否必须要有证书;
如果只想进行服务端单向验证,可不使用客户端证书。
2、SSL证书是否有有效期,服务端和客户端证书分别是如何授权管理的:
SSL证书有有效期。 服务端和客户端的证书都是 CA中心(比如openssl或某商业的CA)授权管理发放的。
3、使用 SSL 证书访问数据库,证书失效或被破坏的异常情况对 API访问数据库有什么影响:
证书失效或被破坏,新的API无法与服务端连接。
4、如需替换服务端或客户端证书,服务端证书替换需要哪些操作,客户端证书替换需要哪些操作,对系统运行有什么影响
服务端和客户端按流程直接替换即可,比如证书文件的替换。
替换前已经建立的连接和会话不受影响,直到会话和连接结束。
替换后新的连接使用新证书,重新验证。
不需要重启服务端。
5、使用 SSL 证书访问数据库,性能及稳定性方面有什么影响。
性能受影响,大概损失5%-10%。
稳定性不受影响