2015-07-13 176 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所述。
相關問題