如何使用JDBC驱动程序和SSL连接连接到Sybase ASE

时间:2015-07-13 12:14:27

标签: java ssl jdbc sybase jconnect

我试图使用JDBC驱动程序建立与Sybase ASE 15.7的SSL连接而没有运气。 我尝试了以下选项:

  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)。

  3. 尝试搜索Sybase文档并没有太大的运气,既没有这个错误也没有使用JConnect的SSL。

    我们非常感谢任何答案 - 我对驱动程序和配置的类型非常灵活。

    由于

1 个答案:

答案 0 :(得分:1)

经过多次调查,我找到了解决方案。实际上是2。

  1. 使用trust all certificate JDBC连接字符串参数: 如果您不介意信任所有证书(仅当您完全信任您正在使用的网络时才执行此操作,尤其是公共互联网上的任何内容),您可以添加一个连接字符串,指示SSLSocketFactory创建信任连接所有证书。连接字符串如下所示:select pattern, count(*) from (select id, group_concat(code order by code) as pattern from t group by id ) p group by pattern;
  2. 使用sybase证书: 证书需要导入到Java应用程序信任库。 如果您不使用指定的信任库,则可以将其导入jdbc:sybase:Tds:host:port/dbname?ENABLE_SSL=true&SSL_TRUST_ALL_CERTS=true下的Java默认信任库。可以使用keytool导入证书,如here所述。