更新时间:2025-08-29 GMT+08:00
如何通过TLS(SSL)方式连接GeminiDB HBase接口实例
前置步骤
- 登录管理控制台。
- 在服务列表中选择“数据库 > 云数据库 GeminiDB”。
- 在“实例管理”页面,单击目标实例名称,进入“基本信息”页面。
- 在“数据库信息”处,将SSL开关打开
,并单击SSL开关旁边的下载按钮,下载ca.cert文件。
- 将ca.cert文件上传到ECS上。
- 在您的ECS上执行以下命令,将服务端证书文件放入一个truststore中,证书密码默认为"PASSWORD",您可以修改下面命令中的PASSWORD为您所需要的密码,以便客户端读取。 该处生成的truststore文件将会在后续连接方式样例中被使用。
keytool -importcert -alias hw -file ca.cert -keystore truststore.jks -storepass PASSWORD
通过HBase Shell建立TLS连接
客户端hbase-site.xml中增加以下配置项:
- hbase.rpc.tls.truststore.location项的值为6生成的truststore.jks文件路径,推荐使用绝对路径。
- hbase.rpc.tls.truststore.password项的值为6设置的密码。注意,密码默认为 “PASSWORD”。
<property> <name>hbase.client.netty.tls.enabled</name> <value>true</value> </property> <property> <name>hbase.rpc.tls.truststore.location</name> <value>conf/truststore.jks</value> </property> <property> <name>hbase.rpc.tls.truststore.password</name> <value>PASSWORD</value> </property>
设置完成后正常启动HBase Shell检验连接是否成功。
通过Java应用建立TLS连接
参考以下Java代码,请修改其中的连接地址,证书文件目录等路径,使其指向正确的连接地址与证书文件:
package com.huawei; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.TableDescriptor; import org.apache.hadoop.hbase.client.TableDescriptorBuilder; import static org.apache.hadoop.hbase.io.crypto.tls.X509Util.HBASE_CLIENT_NETTY_TLS_ENABLED; import static org.apache.hadoop.hbase.io.crypto.tls.X509Util.HBASE_CLIENT_NETTY_TLS_VERIFY_SERVER_HOSTNAME; import static org.apache.hadoop.hbase.io.crypto.tls.X509Util.TLS_CONFIG_TRUSTSTORE_LOCATION; import static org.apache.hadoop.hbase.io.crypto.tls.X509Util.TLS_CONFIG_TRUSTSTORE_PASSWORD; public class ExampleTlsConnection { public static void main(String[] args) throws Throwable { Configuration conf = HBaseConfiguration.create(); // todo: change connect address conf.set("hbase.zookeeper.quorum", "127.0.0.1"); conf.set("hbase.zookeeper.property.clientPort", "2181"); // todo: change those two strings. String path = "/absolute/path/to/your/truststore.jks"; String password = "your_truststore_pass_word"; conf.setBoolean(HBASE_CLIENT_NETTY_TLS_ENABLED, true); conf.setBoolean(HBASE_CLIENT_NETTY_TLS_VERIFY_SERVER_HOSTNAME, false); conf.set(TLS_CONFIG_TRUSTSTORE_LOCATION, path); conf.set(TLS_CONFIG_TRUSTSTORE_PASSWORD, password); // 填写用户名和密码 UserGroupInformation ugi = UserGroupInformation.createProxyUser("your_user_name", UserGroupInformation.createRemoteUser("your_password")); try (Connection connection = ConnectionFactory.createConnection(conf, User.create(ugi))) { Admin admin = connection.getAdmin(); TableName tb = TableName.valueOf("test"); List<ColumnFamilyDescriptor> cfs = new ArrayList<>(); cfs.add(ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes()).build()); cfs.add(ColumnFamilyDescriptorBuilder.newBuilder("cf2".getBytes()).build()); cfs.add(ColumnFamilyDescriptorBuilder.newBuilder("cf3".getBytes()).build()); cfs.add(ColumnFamilyDescriptorBuilder.newBuilder("cf4".getBytes()).build()); cfs.add(ColumnFamilyDescriptorBuilder.newBuilder("cf5".getBytes()).build()); TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(tb).setColumnFamilies(cfs).build(); admin.createTable(tableDescriptor); } } }