Java 如何通过SSL连接字符串调试JBoss/Oracle JDBC?

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

我正在尝试配置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-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