Java 如何通过SSL连接字符串调试JBoss/Oracle JDBC?
我正在尝试配置JBoss数据源,它通过Oracle瘦客户端连接到Oracle DB JBoss版本:6.4.5.GA Oracle版本:12.1.0.2.0 瘦客户端JDBC版本:11.2.0.3.0 以下未加密的数据源可以正常工作Java 如何通过SSL连接字符串调试JBoss/Oracle JDBC?,java,oracle,ssl,jdbc,jboss,Java,Oracle,Ssl,Jdbc,Jboss,我正在尝试配置JBoss数据源,它通过Oracle瘦客户端连接到Oracle DB JBoss版本:6.4.5.GA Oracle版本:12.1.0.2.0 瘦客户端JDBC版本:11.2.0.3.0 以下未加密的数据源可以正常工作 <datasource jta="true" jndi-name="java:/IDP_DS" pool-name="IDP_DS" enabled="true" use-java-context="true"> <connection-u
<datasource jta="true" jndi-name="java:/IDP_DS" pool-name="IDP_DS" enabled="true" use-java-context="true">
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST= (LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCP)(HOST=[HOSTNAME])(PORT=1521)) ) (CONNECT_DATA=(SERVICE_NAME= [SERVICENAME]))))</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver>oracle</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>100</max-pool-size>
</pool>
<security>
<user-name>[DB user]</user-name>
<password>[DB password]</password>
</security>
<validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>20000</blocking-timeout-millis>
<idle-timeout-minutes>2</idle-timeout-minutes>
</timeout>
<statement>
<prepared-statement-cache-size>20</prepared-statement-cache-size>
</statement>
</datasource>
及
原因:java.sql.SQLRecoverableException:IO错误:握手期间远程主机关闭连接
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:467)
位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:546)
位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:236)
位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
位于org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:323)
... 178更多
原因:javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接
在sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:992)[jsse.jar:1.8.091]
在sun.security.ssl.SSLSocketImpl.performinialhandshake(SSLSocketImpl.java:1375)[jsse.jar:1.8.091]
在sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)[jsse.jar:1.8.091]
在sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)[jsse.jar:1.8.091]
位于oracle.net.ns.Packet.send(Packet.java:403)
位于oracle.net.ns.ConnectPacket.send(ConnectPacket.java:198)
位于oracle.net.ns.NSProtocol.connect(NSProtocol.java:293)
位于oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
... 183多
原因:java.io.EOFException:SSL对等机错误关闭
在sun.security.ssl.InputRecord.read(InputRecord.java:505)[jsse.jar:1.8.091]
在sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)[jsse.jar:1.8.091]
... 191更多
适当的证书已添加到$JAVA_HOME/jre/lib/security/cacerts信任存储中,但没有成功
数据库服务器报告“未知错误”
DBA成功地使用了连接字符串(使用SQL developer和SQL Plus),但使用了Oracle Wallet进行证书处理
我试过用Squirre连接,但没有成功。有没有更好的调试方法 您是否将完整的证书链导入了
cacerts
?您可以使用JVM选项启用-Djavax.net.debug=all
。根据您的JVM版本,您可能还需要通过另一个选项调整正在使用的TLS协议列表,例如:-Dhttps.protocols=“TLSv1.2,TLSv1.1,TLSv1”
。您可能想看看这个。
<datasource jta="true" jndi-name="java:/IDP_DS" pool-name="IDP_DS" enabled="true" use-java-context="true">
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(CONNECT_TIMEOUT=3)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST= (LOAD_BALANCE=on) (ADDRESS=(PROTOCOL=TCPS)(HOST=[HOSTNAME])(PORT=2484 )) ) (CONNECT_DATA=(SERVICE_NAME= [SERVICE NAME]))))</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver>oracle</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>100</max-pool-size>
</pool>
<security>
<user-name>[DB user]</user-name>
<password>[DB password]</password>
</security>
<validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>20000</blocking-timeout-millis>
<idle-timeout-minutes>2</idle-timeout-minutes>
</timeout>
<statement>
<prepared-statement-cache-size>20</prepared-statement-cache-size>
</statement>
</datasource>
14:01:45,680 ERROR [org.jboss.as.ejb3.invocation] (http-/0.0.0.0:8443-1) JBAS014134: EJB Invocation failed on component PreferencesBean for method public abstract java.util.Map com.adobe.idp.config.PreferencesSPI.getSystemRoot() throws com.adobe.idp.common.errors.exception.IDPException,com.adobe.idp.common.errors.exception.IDPSystemException: com.adobe.idp.common.errors.exception.IDPSystemExceptionorigin: com.adobe.idp.common.errors.exception.IDPException| [com.adobe.idp.storeprovider.database.DBDatasourceFactory] errorCode:8193 errorCodeHEX:0x2001 message:javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:/IDP_DS
at com.adobe.idp.config.PreferencesBean.getSystemRoot(PreferencesBean.java:93) [um.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_91]
at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_91]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
...
Caused by: java.sql.SQLRecoverableException: IO Error: Remote host closed connection during handshake
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:467)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:323)
... 178 more
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:992) [jsse.jar:1.8.0_91]
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) [jsse.jar:1.8.0_91]
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747) [jsse.jar:1.8.0_91]
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) [jsse.jar:1.8.0_91]
at oracle.net.ns.Packet.send(Packet.java:403)
at oracle.net.ns.ConnectPacket.send(ConnectPacket.java:198)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:293)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
... 183 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:505) [jsse.jar:1.8.0_91]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) [jsse.jar:1.8.0_91]
... 191 more