Java 中如何使用 SSL 连接 IoTDB

问题

Java 中如何使用 SSL 连接 IoTDB?

方案

SSL(Secure Sockets Layer)是一种安全协议,用于在网络通信中提供加密、认证和数据完整性保护。它主要用于在互联网上保护数据传输,确保数据在传输过程中不被窃听或篡改。

IoTDB 支持 SSL 协议,但是在配置文件中相关参数是默认关闭的状态,如下:

sql 复制代码
# Does dn_rpc_port enable SSL
# effectiveMode: restart
# Datatype: boolean
enable_thrift_ssl=false

# SSL key store path
# linux e.g. /home/iotdb/server.keystore (absolute path) or server.keystore (relative path)
# windows e.g. C:\\iotdb\\server.keystore (absolute path) or server.keystore (relative path)
# effectiveMode: restart
key_store_path=

# SSL key store password
# effectiveMode: restart
# Datatype: String
key_store_pwd=

因此,我们需要开启 SSL,并配置 key_store 相关参数(可使用 Java 提供的 keytool 工具生成 SSL 证书),然后重启 IoTDB 服务。

sql 复制代码
enable_thrift_ssl=true
key_store_path=/iotdb/ssl/.keystore   #keystore的完整路径
key_store_pwd=password  #keystore的密码

重启成功后,可以先通过 CLI 窗口验证一下 SSL 是否配置成功。进入到 sbin 目录下,通过 ./start-cli.sh 命令启动,此时需要注意,开启 SSL 后,需要在执行命令的时候添加相应的参数:

sql 复制代码
./start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root -usessl true -ts /iotdb/ssl/.truststore -tpw 123456
# -usessl <use_ssl>            use_ssl statement 
# -ts <trust_store>            trust_store statement
# -tpw <trust_store_pwd>       trust_store_pwd statement

验证通过后,可以通过 IoTDB 提供的 Java 原生接口创建 SSL 连接。

Session 方式

  • useSSL:是否开启 SSL
  • trustStore:trustStore 的证书路径
  • trustStorePwd:trustStore 的证书密码(秘钥库口令)
sql 复制代码
session = 
    new Session.Builder()
        .fetchSize(int fetchSize)
        .host(String host)
        .port(String port)
        .username(String username)
        .password(String password)
        .useSSL(true)
        .trustStore("/iotdb/ssl/.truststore")  
        .trustStorePwd("password")
        .build();

SessionPool 方式

  • useSSL:是否开启 SSL
  • trustStore:trustStore 的证书路径
  • trustStorePwd:trustStore 的证书密码(秘钥库口令)
sql 复制代码
sessionPool =
     new SessionPool.Builder()
        .nodeUrls(List<String> nodeUrls)
        .user(String username)
        .password(String password)
        .useSSL(true)
        .trustStore("/iotdb/ssl/.truststore")  
        .trustStorePwd("password")
        .build();

备注

使用 keytool 工具生成 SSL 证书的简易步骤如下:

  1. 生成密钥对:
sql 复制代码
keytool -genkeypair -alais mykey -keyalg RSA -validity 7 -keystore .keystore
# -alias:为你的密钥对指定一个别名,示例中为 mykey。
# -keyalg:指定密钥算法,示例中为 RSA。
# -validity:证书有效期,示例中为 7 天。
# -keystore:指定密钥库文件的名称,示例中为 .keystore。
  1. 导出相应的证书:
sql 复制代码
keytool -export -alais mykey -keystore .keystore -rfc -file certificate.cer
# -alias:指定要从密钥库中导出的证书的别名,示例中为 mykey。
# -keystore:指定密钥库文件的位置和名称,示例中为当前目录下的 .keystore 文件。
# -rfc:指定导出证书的格式,示例中导出证书时使用 RFC 格式,这是一种更加通用的格式
# -file:指定导出的证书文件的名称,示例中导出的证书将被保存为当前目录下的 certificate.cer 文件。
  1. 将该证书导入客户端信任库:
sql 复制代码
keytool -import -alais mykey -file certificate.cer -keystore .truststore
# -alias:指定导入证书的别名,示例中为 mykey。这个别名在信任库中必须是唯一的。
# -file:指定要导入的证书文件的路径和文件名,示例中为当前目录下的 certificate.cer 文件。
# -keystore:指定信任库文件的位置和名称,示例中为当前目录下的 .truststore 文件。
相关推荐
panxianren12 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
sunshine22 girl14 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs14 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang15 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl15 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat15 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
许彰午16 小时前
01-Oracle数据库简介与版本选择
数据库·oracle
菜鸟~noob23316 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
泡茶喝茶写代码17 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
Seraphina3618 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql