web-dev-qa-db-ja.com

ドライバーは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>

編集:

同じ構成と別のネットワーク上の同じラップトップを使用してデータベースに接続できます。このエラーが発生するのは、自宅のネットワーク上だけです

13
Mees Kluivers

ラップトップが「別のネットワーク」上にある場合、接続しているデータベースサーバーも保護しているファイアウォールの内側にあると思われます。したがって、この場合、データベース接続を行うのに問題はありません。

あなたの「自宅のネットワーク」は、接続しようとしているデータベースサーバーを保護しているファイアウォールの外側にあると思います。したがって、この場合のデータベース接続の試行は、ファイアウォール保護のために無視されます。

これらの仮定が正しい場合は、「別のネットワーク」のネットワーク管理者に連絡して、ホームネットワークからファイアウォールを介してアクセスする必要があります。

これがお役に立てば幸いです。

1
JohnH

あなたの問題は https://youtrack.jetbrains.com/issue/IDEA-163324 に似ています

解決策は次のとおりです。

  • オープンターミナル
  • scutil --getHostNameを実行します
  • ホスト名が設定されていないか、.localが含まれている場合は、Sudo scutil --set HostName "<YOUR HOSTNAME HERE>"を実行します。
2
wonsky

以下のように文字列をurlにして、プロジェクトにsqljdbc42.jarを追加してください。

url = "jdbc:sqlserver://" +serverName + ":1433;DatabaseName=" + dbName +";

encrypt = true;

trustServerCertificate=true;
1
Sunil Kumar