ドライバーはSSLを使用してSQLServerへの安全な接続を確立できませんでした
SQLデータベースへの接続に問題があります。 SQLサーバーに接続しようとすると、次のエラーが発生します。
Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.Java:132)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.Java:118)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.Java:140)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.Java:58)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.Java:75)
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.Java:106)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:206)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.Java:260)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.Java:94)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.Java:1887)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1845)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.Java:857)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.Java:850)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.Java:425)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.Java:849)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.Java:75)
... 143 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 did not return a response. The connection has been closed. ClientConnectionId:.....".
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 org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.Java:55)
... 160 more
Caused by: Java.io.IOException: SQL Server did not return a response. The connection has been closed. ClientConnectionId:.....
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 Sun.security.ssl.InputRecord.readFully(InputRecord.Java:465)
at Sun.security.ssl.InputRecord.read(InputRecord.Java:503)
at Sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.Java:973)
at Sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.Java:1375)
at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1403)
at Sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.Java:1387)
at com.Microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.Java:1618)
... 165 more
これはcom.Microsoft.sqlserver.jdbc.SQLServerDriver
を使用しています
JtDSドライバーを使用するときはいつでも(たとえば この投稿 によって提案されます)、SQLサーバーに接続できず、次のエラーが発生します。
Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.Java:132)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.Java:118)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.Java:140)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.Java:58)
at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.Java:75)
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.Java:106)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:206)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.Java:260)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.Java:94)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.Java:1887)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1845)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.Java:857)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.Java:850)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.Java:425)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.Java:849)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.Java:75)
... 143 more
Caused by: Java.sql.SQLException: I/O Error: DB server closed connection.
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.Java:2481)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.Java:632)
at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.Java:371)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.Java:184)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.Java:55)
... 160 more
Caused by: Java.io.IOException: DB server closed connection.
at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.Java:852)
at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.Java:731)
at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.Java:477)
at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.Java:114)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.Java:2368)
... 164 more
私が使用する接続文字列:(jtdsを使用)
jdbc:jtds:sqlserver://url.database.windows.net:[PORT];database=name;
またはjtdsを使用しない場合。
jdbc:sqlserver://url.database.windows.net:[PORT];database=name;
また、これらの構成を使用して実際に実行し、データベースに接続できるサーバーもあります。データベースにローカルに接続しようとすると、これらのエラーが発生し続けます。
MacOSSierraバージョン10.21を実行しています
jtdsバージョン:
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.3.1</version>
</dependency>
sqlserverバージョン:
<dependency>
<groupId>com.Microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
編集:
同じ構成と別のネットワーク上の同じラップトップを使用してデータベースに接続できます。このエラーが発生するのは、自宅のネットワーク上だけです
ラップトップが「別のネットワーク」上にある場合、接続しているデータベースサーバーも保護しているファイアウォールの内側にあると思われます。したがって、この場合、データベース接続を行うのに問題はありません。
あなたの「自宅のネットワーク」は、接続しようとしているデータベースサーバーを保護しているファイアウォールの外側にあると思います。したがって、この場合のデータベース接続の試行は、ファイアウォール保護のために無視されます。
これらの仮定が正しい場合は、「別のネットワーク」のネットワーク管理者に連絡して、ホームネットワークからファイアウォールを介してアクセスする必要があります。
これがお役に立てば幸いです。
あなたの問題は https://youtrack.jetbrains.com/issue/IDEA-163324 に似ています
解決策は次のとおりです。
- オープンターミナル
scutil --getHostName
を実行します- ホスト名が設定されていないか、.localが含まれている場合は、
Sudo scutil --set HostName "<YOUR HOSTNAME HERE>"
を実行します。
以下のように文字列をurl
にして、プロジェクトにsqljdbc42.jar
を追加してください。
url = "jdbc:sqlserver://" +serverName + ":1433;DatabaseName=" + dbName +";
encrypt = true;
trustServerCertificate=true;