web-dev-qa-db-fra.com

Le pilote n'a pas pu établir une connexion sécurisée à SQL Server à l'aide de SSL

J'ai des problèmes de connexion aux bases de données SQL. Chaque fois que j'essaie de me connecter à un serveur SQL, l'erreur suivante apparaît.

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

Ceci utilise com.Microsoft.sqlserver.jdbc.SQLServerDriver

À chaque fois que j'utilise le pilote JtDS (suggéré par exemple. cet article ), je ne parviens toujours pas à me connecter au serveur SQL et j'obtiens le message d'erreur suivant.

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

La chaîne de connexion que j'utilise: (en utilisant jtds)

jdbc:jtds:sqlserver://url.database.windows.net:[PORT];database=name;

OU lorsque vous n'utilisez pas jtds ..

jdbc:sqlserver://url.database.windows.net:[PORT];database=name;

J'ai également un serveur capable d'exécuter et de se connecter à la base de données à l'aide de ces configurations. Je n'arrête pas de recevoir ces erreurs en essayant de me connecter à la base de données localement.

J'utilise macOS Sierra version 10.21

version jtds:

<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.3.1</version>
</dependency>

version de sqlserver:

<dependency>
   <groupId>com.Microsoft.sqlserver</groupId>
   <artifactId>sqljdbc4</artifactId>
   <version>4.0</version>
</dependency>

EDIT:

Je peux me connecter à la base de données en utilisant la même configuration ET le même ordinateur portable sur un réseau différent. C’est seulement sur mon réseau à la maison que j’obtiens cette erreur

13
Mees Kluivers

Je soupçonne que lorsque votre ordinateur portable est sur un "réseau différent", il se trouve également à l'intérieur du pare-feu et protège également les serveurs de base de données auxquels vous vous connectez. Par conséquent, il n'y a aucun problème pour établir les connexions à la base de données pour ce cas.

Je présume que votre "réseau à domicile" se situe en dehors du pare-feu protégeant les serveurs de base de données auxquels vous essayez de vous connecter. Par conséquent, vos tentatives de connexion à la base de données dans ce cas sont ignorées en raison de la protection par le pare-feu.

Si ces hypothèses sont correctes, vous devrez contacter l'administrateur du "réseau différent" pour obtenir un accès via le pare-feu à partir de votre réseau domestique.

J'espère que ça aide.

1
JohnH

Votre problème est similaire à https://youtrack.jetbrains.com/issue/IDEA-163324

La solution est:

  • terminal ouvert
  • exécuter scutil --getHostName
  • si nom_hôte n'est pas défini ou contient .local, exécutez Sudo scutil --set HostName "<YOUR HOSTNAME HERE>"
2
wonsky

Faites votre chaîne url comme ci-dessous et ajoutez sqljdbc42.jar dans votre projet

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

encrypt = true;

trustServerCertificate=true;
0
Sunil Kumar