2015-07-13 132 views
0

我正尝试使用JDBC驱动程序建立与Sybase ASE 15.7的SSL连接,但没有运气。 我尝试以下选项:如何使用JDBC驱动程序和SSL连接来连接到Sybase ASE

  1. 使用JTDS 1.25驱动程序(JTDS-1.2.5.jar)

    具有以下连接字符串:jdbc:jtds:sybase://host:port;databaseName=dbname;ssl=request

    Network error IOException: Connection refused

  2. 使用Jconnect 4(jconn4.jar)

    使用以下连接字符串:

    JDBC:SYBASE:TDS:主机:端口/ DBNAME ENABLE_SSL =真

    java.sql.SQLException: JZ00L: Login failed. Examine the SQLWarnings chained to this exception for the reason(s) ... java.sql.SQLException: I/O Error: DB server closed connection.

    我查了Sybase日志看到以下错误:

    kernel SSL or Crypto Error Message: 'The SSL handshake failed. Root error: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol'.

    它看起来像Sybase服务器期望SSL连接,但java客户端仍然不使用SSL(尽管连接字符串属性标记ssl = true)。

尝试搜索Sybase文档并没有太大的运气,对于此错误和SSL与JConnect都没有。

任何答案将不胜感激 - 我对驱动程序和配置类型很灵活。

谢谢

+0

哪个Java版本? – RealSkeptic

+0

试过1.6和1.7 – zuckermanori

+0

请试用最新的jTDS。在过去的几年中已经暴露出几个SSL/TLS相关的漏洞,并且相应地发布了许多补丁。看起来客户端正在尝试使用SSL2或SSL3,并且大多数安全服务器不再支持这些协议。 – RealSkeptic

回答

0

经过多次调查,我找到了一个解决方案。其实2。

  1. 使用信任所有证书的JDBC连接字符串参数: 如果你不介意信任所有证书(这样做只是如果你完全信任你的工作网络,特别是没有什么打算在公共互联网上),您可以添加一个连接字符串,指示创建连接的SSLSocketFactory来信任所有证书。连接字符串如下所示:jdbc:sybase:Tds:host:port/dbname?ENABLE_SSL=true&SSL_TRUST_ALL_CERTS=true
  2. 使用sybase证书: 需要将证书导入到java应用程序信任库。 如果您不使用指定的信任存储库,则可能会将其导入到位于$JAVA_HOME\jreX\lib\security\cacerts下的Java默认信任存储库。可以使用keytool导入证书,如here所述。
相关问题