SQL Server JDBC Connection Error when using Conscrypt
- Dominant language
- Java
- Stars
- 1.4k
- Forks
- 326
- Avg merge
- 16h 22m
- Merged PRs (30d)
- 17
Description
Attempting to use [Conscrypt](https://github.com/google/conscrypt) (for [OkHttpClient](https://square.github.io/okhttp/security_providers/), using the uber jar, in a web application on Tomcat, under JDK 8, running on mac/windows/linux). Conscrypt is installed in a ServletContextListner.
The problem comes when attempting to create a database connection using the [MS SQL Server JDBC Driver](https://github.com/Microsoft/mssql-jdbc) - specifically ('com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8'). I'm passing ";sslProtocol=TLSv1.2", per the mssql-jdbc [documentation](https://github.com/Microsoft/mssql-jdbc/wiki/SSLProtocol) to ensure that TLSv1.2 is used.
Without inserting Conscrypt, the database connection works fine. Once conscrypt is inserted however database connections fail (Stacktrace follows). Not sure if this is a conscrypt issue or a mssql-jdbc issue.
```
org.jdbi.v3.core.ConnectionException: 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:e291ba3c-20ce-4261-a889-aeb69168c0da".
at org.jdbi.v3.core.Jdbi.open(Jdbi.java:318) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.LazyHandleSupplier.initHandle(LazyHandleSupplier.java:65) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.LazyHandleSupplier.getHandle(LazyHandleSupplier.java:53) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.sqlobject.statement.internal.CustomizingStatementHandler.invoke(CustomizingStatementHandler.java:171) ~[jdbi3-sqlobject-3.16.0.jar:3.16.0]
at org.jdbi.v3.sqlobject.statement.internal.SqlQueryHandler.invoke(SqlQueryHandler.java:27) ~[jdbi3-sqlobject-3.16.0.jar:3.16.0]
at org.jdbi.v3.sqlobject.internal.SqlObjectInitData$1.lambda$invoke$0(SqlObjectInitData.java:126) ~[jdbi3-sqlobject-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.internal.Invocations.invokeWith(Invocations.java:44) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.internal.Invocations.invokeWith(Invocations.java:26) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.LazyHandleSupplier.lambda$invokeInContext$1(LazyHandleSupplier.java:77) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.internal.Invocations.invokeWith(Invocations.java:44) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.internal.Invocations.invokeWith(Invocations.java:26) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.LazyHandleSupplier.invokeInContext(LazyHandleSupplier.java:76) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.sqlobject.internal.SqlObjectInitData$1.call(SqlObjectInitData.java:132) ~[jdbi3-sqlobject-3.16.0.jar:3.16.0]
at org.jdbi.v3.sqlobject.internal.SqlObjectInitData$1.invoke(SqlObjectInitData.java:126) ~[jdbi3-sqlobject-3.16.0.jar:3.16.0]
at org.jdbi.v3.sqlobject.SqlObjectFactory.lambda$attach$2(SqlObjectFactory.java:110) ~[jdbi3-sqlobject-3.16.0.jar:3.16.0]
at com.sun.proxy.$Proxy38.getUnprocessedRequests(Unknown Source) ~[?:?]
at org.jdbi.v3.core.Jdbi.callWithExtension(Jdbi.java:475) ~[jdbi3-core-3.16.0.jar:3.16.0]
at org.jdbi.v3.core.Jdbi.withExtension(Jdbi.java:462) ~[jdbi3-core-3.16.0.jar:3.16.0]
at com.my.PushJob.execute(PushJob.java:79) ~[main/:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.3.2.jar:?]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) ~[quartz-2.3.2.jar:?]
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:e291ba3c-20ce-4261-a889-aeb69168c0da".
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3151) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1910) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2708) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2362) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2213) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1276) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:861) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:744) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:676) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:198) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:132) ~[tomcat-jdbc-9.0.41.jar:?]
at org.jdbi.v3.core.Jdbi.open(Jdbi.java:303) ~[jdbi3-core-3.16.0.jar:3.16.0]
... 20 more
Caused by: java.io.IOException: SQL Server returned an incomplete response. The connection has been closed. ClientConnectionId:e291ba3c-20ce-4261-a889-aeb69168c0da
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:858) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:845) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:1015) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:1005) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:920) ~[conscrypt-openjdk-uber-2.5.1.jar:2.5.1]
at org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:884) ~[conscrypt-openjdk-uber-2.5.1.jar:2.5.1]
at org.conscrypt.ConscryptEngineSocket$SSLInputStream.access$100(ConscryptEngineSocket.java:706) ~[conscrypt-openjdk-uber-2.5.1.jar:2.5.1]
at org.conscrypt.ConscryptEngineSocket.doHandshake(ConscryptEngineSocket.java:230) ~[conscrypt-openjdk-uber-2.5.1.jar:2.5.1]
at org.conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:209) ~[conscrypt-openjdk-uber-2.5.1.jar:2.5.1]
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1820) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2708) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2362) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2213) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1276) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:861) ~[mssql-jdbc-8.4.1.jre8.jar:?]
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:744) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:676) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:198) ~[tomcat-jdbc-9.0.41.jar:?]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:132) ~[tomcat-jdbc-9.0.41.jar:?]
at org.jdbi.v3.core.Jdbi.open(Jdbi.java:303) ~[jdbi3-core-3.16.0.jar:3.16.0]
... 20 more
```
Contributor guide
Assessment
This issue has not been assessed yet.