数据加密

hstream已经使用TLS支持了客户端和服务端之间的数据加密功能, 在本章节,不会过多介绍TLS的细节, 而是集中在开启TLS所需的一些步骤和配置上。

步骤

如果你还没有一个CA,你可以本地创建一个, TLS需要服务端有一个私钥和一个对应签名证书, openssl可以很好地生成key和签证证书, 在那之后,你需要在服务端和客户端配置上对应的生成文件路径。

创建CA

创建或选择一个目录,用于存储私钥和证书:

  1. mkdir tls
  2. cd tls

创建数据库文件和序列号文件:

  1. touch index.txt
  2. echo 1000 > serial

获取openssl.cnf模板文件(注意:这个模板文件主要是用来测试和开发,请不要直接在生产环境使用

  1. wget https://raw.githubusercontent.com/hstreamdb/hstream/main/conf/openssl.cnf

生成CA密钥文件:

  1. openssl genrsa -aes256 -out ca.key.pem 4096

生成CA证书文件:

  1. openssl req -config openssl.cnf -key ca.key.pem \
  2. -new -x509 -days 7300 -sha256 -extensions v3_ca \
  3. -out ca.cert.pem

为服务端创建密钥对和签名证书

这里,我们只为一个服务器生成密钥和证书, 你应该为所有有不同主机名的服务端创建密钥和证书, 或者创建一个在SAN中包含所有主机名(域名或IP地址)的证书。

生成服务端密钥:

  1. openssl genrsa -out server01.key.pem 2048

生成一个服务端证书请求, 你输入Common Name时,应该输入正确的主机名(如localhost):

  1. openssl req -config openssl.cnf \
  2. -key server01.key.pem -new -sha256 -out server01.csr.pem

generate server certificate with generated CA:

  1. openssl ca -config openssl.cnf -extensions server_cert \
  2. -days 1000 -notext -md sha256 \
  3. -in server01.csr.pem -out signed.server01.cert.pem

配置服务端和服务端

服务端配置:

  1. # TLS options
  2. #
  3. # enable tls, which requires tls-key-path and tls-cert-path options
  4. enable-tls: true
  5. #
  6. # key file path for tls, can be generated by openssl
  7. tls-key-path: /path/to/the/server01.key.pem
  8. # the signed certificate by CA for the key(tls-key-path)
  9. tls-cert-path: /path/to/the/signed.server01.cert.pem

客户端示例:

  1. HStreamClient.builder()
  2. .serviceUrl(serviceUrl)
  3. // optional, enable tls
  4. .enableTls()
  5. .tlsCaPath("/path/to/ca.cert.pem")
  6. .build()