首页 > 解决方案 > 尝试从 Java 1.6、JDBC 4.0 连接时,来自 Sql 服务器的 SSL 异常

问题描述

我反复收到以下问题。没有使用 SSL 进行身份验证,我有 Java 1.6 和 JDBC 4.0 与 Spring 3.2 一起放置。这是一个 Spring Batch 应用程序,异常不会停止调度程序作业,但会在数据库操作期间引起问题。

请帮助我找到此问题的根本原因。

2019/08/08 19:55:38,223 INFO   - JobExecutionListener in before JOB NOT RUNNING10077830 7 
    Aug 8, 2019 7:55:38 PM com.microsoft.sqlserver.jdbc.TDSChannel enableSSL
    INFO: java.security path: /usr/jdk/instances/jdk1.6.0_30/jre/lib/security
    Security providers: [SunPKCS11-Solaris version 1.6, SUN version 1.6, SunRsaSign version 1.5, SunJSSE version 1.6, SunJCE version 1.6, SunJGSS version 1.0, SunSASL version 1.5, XMLDSig version 1.0, SunPCSC version 1.6]
    SSLContext provider info: Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)
    SSLContext provider services:
    [SunJSSE: KeyFactory.RSA -> sun.security.rsa.RSAKeyFactory
      aliases: [1.2.840.113549.1.1, OID.1.2.840.113549.1.1]
    , SunJSSE: KeyPairGenerator.RSA -> sun.security.rsa.RSAKeyPairGenerator
      aliases: [1.2.840.113549.1.1, OID.1.2.840.113549.1.1]
    , SunJSSE: Signature.MD2withRSA -> sun.security.rsa.RSASignature$MD2withRSA
      aliases: [1.2.840.113549.1.1.2, OID.1.2.840.113549.1.1.2]
    , SunJSSE: Signature.MD5withRSA -> sun.security.rsa.RSASignature$MD5withRSA
      aliases: [1.2.840.113549.1.1.4, OID.1.2.840.113549.1.1.4]
    , SunJSSE: Signature.SHA1withRSA -> sun.security.rsa.RSASignature$SHA1withRSA
      aliases: [1.2.840.113549.1.1.5, OID.1.2.840.113549.1.1.5, 1.3.14.3.2.29, OID.1.3.14.3.2.29]
    , SunJSSE: Signature.MD5andSHA1withRSA -> com.sun.net.ssl.internal.ssl.RSASignature
    , SunJSSE: KeyManagerFactory.SunX509 -> com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509
    , SunJSSE: KeyManagerFactory.NewSunX509 -> com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$X509
    , SunJSSE: TrustManagerFactory.SunX509 -> com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl$SimpleFactory
    , SunJSSE: TrustManagerFactory.PKIX -> com.sun.net.ssl.internal.ssl.TrustManagerFactoryImpl$PKIXFactory
      aliases: [SunPKIX, X509, X.509]
    , SunJSSE: SSLContext.SSL -> com.sun.net.ssl.internal.ssl.SSLContextImpl
    , SunJSSE: SSLContext.SSLv3 -> com.sun.net.ssl.internal.ssl.SSLContextImpl
    , SunJSSE: SSLContext.TLS -> com.sun.net.ssl.internal.ssl.SSLContextImpl
    , SunJSSE: SSLContext.TLSv1 -> com.sun.net.ssl.internal.ssl.SSLContextImpl
    , SunJSSE: SSLContext.Default -> com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl
    , SunJSSE: KeyStore.PKCS12 -> com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore
    ]
    java.ext.dirs: /usr/jdk/instances/jdk1.6.0_30/jre/lib/ext:/usr/jdk/packages/lib/ext
    2019/08/08 19:55:38,264 ERROR  - Encountered fatal error executing job 
    org.springframework.batch.core.JobExecutionException: Flow execution ended unexpectedly
            at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:141)
            at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:301)
            at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:134)
            at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
            at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:127)
            at com.cbkonnect.h2h.batch.quartz.JobLauncherDetails.executeInternal(JobLauncherDetails.java:51)
            at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113)
            at org.quartz.core.JobRunShell.run(JobRunShell.java:223)
            at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
    Caused by: org.springframework.batch.core.job.flow.FlowExecutionException: Ended flow=FILE_RECIEVE_ACK at state=FILE_RECIEVE_ACK.FILE_RECIEVE_ACK_STEP1 with exception
            at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:161)
            at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:131)
            at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135)
            ... 8 more
    Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server returned an incomplete response. The connection has been closed. ClientConnectionId:0b74d397-671c-44fb-9c9e-18f6b2e6fbb6".
            at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:241)
            at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255)
            at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
            at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
            at $Proxy14.getStepExecutionCount(Unknown Source)
            at org.springframework.batch.core.job.flow.JobFlowExecutor.isStepRestart(JobFlowExecutor.java:82)
            at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:63)
            at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60)
            at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:152)
            ... 10 more
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server returned an incomplete response. The connection has been closed. ClientConnectionId:0b74d397-671c-44fb-9c9e-18f6b2e6fbb6".
            at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)
            at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1668)
            at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323)
            at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
            at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
            at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
            at java.sql.DriverManager.getConnection(DriverManager.java:582)
            at java.sql.DriverManager.getConnection(DriverManager.java:154)
            at com.cbkonnect.jdbc.datasource.CbkonnectDataSource.getConnectionFromDriverManager(CbkonnectDataSource.java:210)
            at com.cbkonnect.jdbc.datasource.CbkonnectDataSource.getConnectionFromDriver(CbkonnectDataSource.java:182)
            at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:153)
            at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119)
            at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:203)
            ... 21 more
    Caused by: java.io.IOException: SQL Server returned an incomplete response. The connection has been closed. ClientConnectionId:0b74d397-671c-44fb-9c9e-18f6b2e6fbb6
            at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.ensureSSLPayload(IOBuffer.java:651)
            at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:708)
            at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:700)
            at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:895)
            at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:883)
            at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
            at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:830)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
            at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
            at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1618)
            ... 32 more
    2019/08/08 19:55:38,277 INFO   - JobExecutionListener after JOB 

标签: javasql-serverssljdbc

解决方案


推荐阅读