DB2 JDBC SSL 连接

问题描述 投票:0回答:1

最近我们的合作伙伴更新了他们的数据库环境以使用 SSL,我们需要更新我们的应用程序配置才能建立与数据库的连接。

我已经生成了 JKS 文件,并将证书导入到 JKS 中。

当我使用 SQL Squirrel 连接字符串时:

jdbc:db2://[主机]:[端口]/[数据库名称]:sslConnection=true;sslTrustStoreLocation=c:\db2_ssl\db2.jks;sslTrustStorePassword=teste123;

连接成功。

如果我使用完全相同的连接字符串:

Connection connection = DriverManager.getConnection("jdbc:db2://[host]:[port]/[databaseName]:sslConnection=true;sslTrustStoreLocation=c:\db2_ssl\db2.jks;sslTrustStorePassword=teste123;", "myuser", "mypassword");

它向我抛出异常,如下所示:

com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][3.64.96] A communication error occurred during operations on the connection's underlying socket, socket input stream, 
or socket output stream.  Error location: T4Agent.sendRequest() - flush (-1).  Message: Received fatal alert: handshake_failure. ERRORCODE=-4499, SQLSTATE=08001
    at com.ibm.db2.jcc.am.bd.a(bd.java:321)
    at com.ibm.db2.jcc.t4.a.a(a.java:548)
    at com.ibm.db2.jcc.t4.a.a(a.java:543)
    at com.ibm.db2.jcc.t4.a.f(a.java:484)
    at com.ibm.db2.jcc.t4.a.flush_(a.java:390)
    at com.ibm.db2.jcc.am.Agent.flowOutsideUOW(Agent.java:246)
    at com.ibm.db2.jcc.t4.b.b(b.java:1220)
    at com.ibm.db2.jcc.t4.b.b(b.java:788)
    at com.ibm.db2.jcc.t4.b.a(b.java:760)
    at com.ibm.db2.jcc.t4.b.a(b.java:421)
    at com.ibm.db2.jcc.t4.b.a(b.java:396)
    at com.ibm.db2.jcc.t4.b.<init>(b.java:334)
    at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:232)
    at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:198)
    at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:475)
    at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:116)
    at java.sql.DriverManager.getConnection(DriverManager.java:379)
    at java.sql.DriverManager.getConnection(DriverManager.java:415)
    at com.ibm.sdpi.wmb.flows.productdata.ProductDataAnnouncementNode.evaluate(ProductDataAnnouncementNode.java:93)
    at com.ibm.broker.javacompute.MbRuntimeJavaComputeNode.evaluate(MbRuntimeJavaComputeNode.java:265)
    at com.ibm.broker.plugin.MbNode.evaluate(MbNode.java:1480)
    at com.ibm.broker.plugin.MbOutputTerminal._propagate(Native Method)
    at com.ibm.broker.plugin.MbOutputTerminal.propagate(MbOutputTerminal.java:114)
    at com.ibm.sdpi.wmb.flows.common.SDPIOutboundCommon_JavaCompute.evaluate(SDPIOutboundCommon_JavaCompute.java:226)
    at com.ibm.broker.javacompute.MbRuntimeJavaComputeNode.evaluate(MbRuntimeJavaComputeNode.java:265)
    at com.ibm.broker.plugin.MbNode.evaluate(MbNode.java:1480)
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.ibm.jsse2.o.a(o.java:22)
    at com.ibm.jsse2.o.a(o.java:34)
    at com.ibm.jsse2.SSLSocketImpl.b(SSLSocketImpl.java:378)
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:479)
    at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:437)
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:772)
    at com.ibm.jsse2.k.write(k.java:3)
    at com.ibm.db2.jcc.t4.db.b(db.java:1685)
    at com.ibm.db2.jcc.t4.db.a(db.java:1633)
    at com.ibm.db2.jcc.t4.a.f(a.java:451)
    ... 22 more

我在 SQL Squirrel 和应用程序中使用完全相同的 DB2 驱动程序。

为什么它在 SQL Squirrel 中可以工作而不能使用 DriverManager?

您对如何使用 SSL 连接到远程 DB2 数据库有任何想法吗?

提前致谢。

java ssl db2 connection driver
1个回答
0
投票

感谢所有回复。 经过几次测试,我发现“问题”出在 JDK 上。 我改用JDK 1.8,成功了。

不确定我们是否有针对其他 JDK 版本的解决方法。

谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.