通过HTTPS协议连接ClickHouse

您可以通过HTTPS协议访问云数据库ClickHouse。本文介绍如何通过HTTPS协议连接云数据库ClickHouse集群。

前提条件

  • 云数据库ClickHouse集群的20.8及以上版本支持通过HTTPS协议连接。

  • 已开通HTTPS协议并下载SSL CA证书。如何开通和下载,请参见开通HTTPS协议

  • 已将连接源的IP地址添加到云数据库ClickHouse集群的白名单中。如何添加,请参见设置白名单

  • 如果连接源和云数据库ClickHouse集群不属于同一个VPC,请先为云数据库ClickHouse集群申请外网地址。

注意事项

  • 通过HTTPS协议连接云数据库ClickHouse集群会增加网络连接响应时间。

  • 通过HTTPS协议连接云数据库ClickHouse集群会显著增加CPU使用率,建议您在使用外网且有加密需求时,使用HTTPS协议访问云数据库ClickHouse。使用VPC网络相对安全,一般无需使用HTTPS协议访问云数据库ClickHouse

Java JDBC方式连接

  1. 使用Eclipse或其他IDE工具创建Maven项目并引入ClickHouse驱动依赖包。

    <dependency>
      <groupId>ru.yandex.clickhouse</groupId>
      <artifactId>clickhouse-jdbc</artifactId>
      <version>0.3.1</version>
    </dependency>
  2. 编写应用程序代码。获取Clickhouse连接对象。

    语法如下。

    public void run()
            throws InterruptedException {
    
        final ClickHouseProperties clickHouseProperties = new ClickHouseProperties();
        clickHouseProperties.setSslRootCertificate("<证书路径>");
        clickHouseProperties.setSsl(true);
        clickHouseProperties.setSslMode("<SSL Mode,取值:strict、none>");
        clickHouseProperties.setUser("<数据库账号>");
        clickHouseProperties.setPassword("<数据库账号的密码>");
        clickHouseProperties.setSocketTimeout(<超时时间,单位:毫秒>);
      	ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://<外网地址、VPC地址或IP地址>:<HTTPS端口号>/<数据库名称>?ssl=true", clickHouseProperties);
        try {
            final ClickHouseConnection conn = dataSource.getConnection();
            conn.createStatement().executeQuery("select now()");
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
    说明

    如果通过IP地址连接,连接源和云数据库ClickHouse集群需属于同一个VPC且SSL Mode取值为none

    示例如下。

    public void run()
            throws InterruptedException {
    
        final ClickHouseProperties clickHouseProperties = new ClickHouseProperties();
        clickHouseProperties.setSslRootCertificate("/user/ck-root-ClickHouse-CA-Chain.pem");
        clickHouseProperties.setSsl(true);
        clickHouseProperties.setSslMode("strict");
        clickHouseProperties.setUser("test");
        clickHouseProperties.setPassword("123456Aa");
        clickHouseProperties.setSocketTimeout(2 * 3600 * 1000);
       	ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://cc-****.public.clickhouse.ads.aliyuncs.com:8443/test01?ssl=true", clickHouseProperties);
        try {
            final ClickHouseConnection conn = dataSource.getConnection();
            conn.createStatement().executeQuery("select now()");
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

curl命令行方式连接

语法如下。

curl --cacert <证书路径> https://<外网地址或VPC地址>:<HTTPS端口号>/ping

示例如下。

curl --cacert ./ck-root-ClickHouse-CA-Chain.pem https://cc-bp163l724nkf****.clickhouse.ads.aliyuncs.com:8443/ping