我尝试使用 JDBC 驱动程序建立与 Sybase ASE 15.7 的 SSL 连接,但没有成功。
我尝试了以下选项:
-
使用 JTDS 1.25 驱动程序 (jtds-1.2.5.jar)
使用以下连接字符串:jdbc:jtds:sybase://host:port;databaseName=dbname;ssl=request
I got Network error IOException: Connection refused
-
使用 Jconnect 4 (jconn4.jar)
具有以下连接字符串:
jdbc:sybase:Tds:主机:端口/数据库名称?ENABLE_SSL=true
I got 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 文档,但运气不佳,无论是针对此错误还是针对 JConnect 的 SSL。
任何答案将不胜感激 - 我对驱动程序的类型和配置很灵活。
Thanks
经过大量调查,我找到了解决方案。 2 实际上。
- 使用信任所有证书 JDBC 连接字符串参数:
如果您不介意信任所有证书(仅当您完全信任您正在使用的网络,尤其是公共互联网上的任何内容时才执行此操作),您可以添加一个连接字符串,指示创建信任连接的 SSLSocketFactory所有证书。连接字符串将如下所示:
jdbc:sybase:Tds:host:port/dbname?ENABLE_SSL=true&SSL_TRUST_ALL_CERTS=true
- 使用sybase证书:
需要将证书导入到java应用程序信任存储中。
如果您不使用指定的信任存储,它可能会被导入到下面的 Java 默认信任存储中
$JAVA_HOME\jreX\lib\security\cacerts
。可以使用 keytool 导入证书,如下所述here https://docs.oracle.com/javase/tutorial/security/toolfilex/rstep1.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)