【问题标题】:SSH tunnel not working with JDBC while trying to route HTTPS traffic尝试路由 HTTPS 流量时,SSH 隧道无法与 JDBC 一起使用
【发布时间】:2018-12-27 05:20:27
【问题描述】:

我正在尝试连接到仅开放端口 443 以使用 JDBC 驱动程序进行通信的 Snowflake。我不想直接连接到雪花服务器,而是想通过隧道服务器连接到它。所以我创建了一个从本地机器到雪花服务器的 ssh 隧道。我将转发的本地地址和端口作为 JDBC 连接字符串的主机传递。这是我的最终 JDBC 字符串。

jdbc:snowflake://127.0.0.1:21212/?db=TEST_DB&warehouse=LOAD_WH&user=<user>&password=<password>

但 JDBC 驱动程序在 SSL 握手期间无法建立连接并失败。由于 JDBC 连接字符串中的主机地址不具有雪花 SSL 证书中 CN 和 SAN 的格式。

添加堆栈跟踪:-

javax.net.ssl.SSLPeerUnverifiedException: Certificate for <10.11.227.124> doesn't match any of the subject alternative names: [*.snowflakecomputing.com, snowflakecomputing.com]
at net.snowflake.client.jdbc.internal.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSocketFactory.java:467)
at net.snowflake.client.jdbc.internal.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:397)
at net.snowflake.client.jdbc.internal.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
at net.snowflake.client.jdbc.internal.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
at net.snowflake.client.jdbc.internal.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
at net.snowflake.client.jdbc.internal.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at net.snowflake.client.jdbc.internal.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at net.snowflake.client.jdbc.internal.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at net.snowflake.client.jdbc.internal.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at net.snowflake.client.jdbc.internal.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at net.snowflake.client.jdbc.internal.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at net.snowflake.client.jdbc.internal.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at net.snowflake.client.jdbc.internal.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at net.snowflake.client.jdbc.internal.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at net.snowflake.client.jdbc.RestRequest.execute(RestRequest.java:141)
at net.snowflake.client.core.HttpUtil.executeRequestInternal(HttpUtil.java:280)
at net.snowflake.client.core.HttpUtil.executeRequest(HttpUtil.java:234)
at net.snowflake.client.core.SessionUtil.openSession(SessionUtil.java:906)
at net.snowflake.client.core.SFSession.open(SFSession.java:330)
at net.snowflake.client.jdbc.SnowflakeConnectionV1.<init>(SnowflakeConnectionV1.java:239)
at net.snowflake.client.jdbc.SnowflakeDriver.connect(SnowflakeDriver.java:344)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:670)
at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:52)
at org.apache.sqoop.tool.EvalSqlTool.run(EvalSqlTool.java:70)
at org.apache.sqoop.Sqoop.run(Sqoop.java:175)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:211)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:250)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:259)
at org.apache.sqoop.Sqoop.main(Sqoop.java:268)
at com.cloudera.sqoop.Sqoop.main(Sqoop.java:57)

任何人过去做过类似的事情并且可以指导我如何做到这一点?

【问题讨论】:

    标签: jdbc ssl-certificate ssh-tunnel apache-httpcomponents snowflake-cloud-data-platform


    【解决方案1】:

    默认情况下,雪花 JDBC 驱动程序将使用 tls 进行通信,因为雪花在公共云上,我们必须验证证书才能信任连接。但是,在您的情况下,您正在尝试连接到本地服务器(我猜那里没有 tls),您可以在连接属性中添加 turn ssl off 。你可以试试

    Properties prop = new Properties();
    prop.put("account", "testaccount");
    ...
    prop.put("ssl", "off");
    Connection conn = DriverManager.getConnection(url, prop);
    

    我不确定这是否可行,但我认为值得一试。

    【讨论】:

    • ssl 关闭时,Snowflake 不允许连接。我已尝试关闭 ssl,但它会在尝试连接时超时。
    猜你喜欢
    • 2020-08-06
    • 2016-03-27
    • 2016-10-11
    • 2013-07-30
    • 2017-10-20
    • 2021-11-22
    • 2021-06-06
    • 2021-02-25
    • 1970-01-01
    相关资源
    最近更新 更多