JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Resolver error al conectarse a SQL Server debido al certificado SSL

La situación es la siguiente: vas a conectarte a SQL Server desde un equipo remoto usando exactamente las mismas credenciales que usabas para conectarte en local y, al hacerlo, recibes un error como este:

Error mostrado por SQL Server al conectarse

que dice en español algo así como:

Se ha establecido con éxito una conexión con el servidor, pero ha ocurrido un error durante el proceso de autenticación. El certificado recibido del servidor remoto fue emitido por una entidad emisora de certificados que no son de confianza.

Nada, que no hay manera de conectarse. El mensaje habla de un certificado y menciona al proveedor de SSL de SQL Server... Pero tú no has instalado ningún certificado en el servidor... ¿De qué va todo esto?

Cuando SQL Server se instala, salvo que al hacerlo le indiquemos explícitamente que vamos a utilizar un determinado certificado digital para securizar las comunicaciones, el servidor instala un certificado auto-firmado para ello. Este certificado está creado por el propio SQL Server y no se sustenta en una infraestructura de clave pública real. Lo que quiere decir que el certificado sirve para cifrar las comunicaciones y validar su integridad, pero no sirve para asegurar que nos estamos conectando al servidor correcto, ya que la única "autoridad" que nos asegura que el servidor es el correcto, es el propio servidor 😖

De eso precisamente es de lo que va ese mensaje de error. Lo que nos indica es que, por defecto, como no se puede verificar la identidad del servidor, no permite la conexión.

Algo similar ocurre con muchos otros servicios que usan por defecto un certificado auto-firmado. Por ejemplo, al conectarnos por primera vez a un equipo remoto usando Terminal Server (llamado también Escritorio Remoto), se nos pregunta si queremos confiar o no en ese certificado y por lo tanto conectarnos al servidor:

Advertencia mostrada por escritorio remoto al conectarse a un servidor sin certificado de confianza

Es normal, al fin y al cabo los principales propósitos de un certificado digital son tres:

  1. Privacidad de la información, cifrando las comunicaciones en el tránsito
  2. Integridad de la comunicación, combinándolos con resúmenes digitales
  3. Confianza, saber que las comunicaciones vienen de quién dicen venir y que no estamos comunicando con quien creemos.

Las 2 primeras no sirven de mucho si falla la tercera...

¿Cómo lo solucionamos?

Si el error nos lo está dando el propio SQL Server Management Studio, cuando nos queremos conectar desde la pantalla de login, lo que tenemos que hacer es ir a las opciones avanzadas de ese diálogo:

Al entrar, enl a pestaña de "Propiedades de la conexión" veremos que está marcada la opción de "Cifrar conexión":

Siempre podemos desmarcarla y evitar que se produzca el error, pero entonces todo el tráfico entre nuestro equipo y el servidor SQL Server remoto se enviará en claro a través de Internet, así que es una mala idea.

Si vamos a la pestaña "Parámetros adicionales de la conexión", podemos escribir un modificador para que la conexión confíe en el certificado del servidor SQL Server remoto. Este parámetro adicional es:

TrustServerCertificate=True

Basta con escribirlo en el cuadro de texto de esa ventana:

Ahora al pulsar en "Conectar" veremos que el error desaparece y podemos trabajar con normalidad.

Si el error lo está dando una aplicación, solo hay que modificar la cadena de conexión y ponerle al final el mismo parámetro.

Evidentemente, si hacemos esto tenemos que estar seguros de que el servidor al que nos estamos conectando es el que nos interesa de verdad y que no existe un problema de seguridad que pueda estar falseando las DNS para que nos conectemos a otro sitio...

¡Espero que te resulte útil!

José Manuel Alarcón José Manuel Alarcón
Fundador de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Comentarios (6) -

Buenas tardes, tengo el mismo problema pero cuando intento conectarme desde Excel 2016
Voy a  la pestaña "Datos", "Obtener datos" "desde una base de datos SQL Server" pongo la IP del servidor Navision (que tiene una SQL) y me sale ese error.
El sistema operativo desde el que me intento conectar es un W7 Pro
Sin embargo si hago lo mismo desde un W10 Pro puedo acceder sin problema haciendo lo mismo.
¿Habrá alguna solución sin tocar el servidor o la base de datos?, quiero decir desde el propio Excel.
Gracias de antemano, un saludo.

Responder

by Jose M. Alarcon

Hola:

Lo siento pero me temo que desde Excel no existe la opción de añadir ese parámetro por lo que estoy viendo.  Desconozco si hay otro medio de hacerlo desde allí.

Lamento no poder ayudarte.

Responder

Alejandro

En cualquier caso muchas gracias por tan rápida respuesta.
En el peor de los casos lo que haré será subir W7 a W10 y listo.
También creo que  hay un complemento en las opciones de la instalación del cliente de Navision que hace que Excel pueda actualizar datos de Navision.
Lo probaré a ver que tal.

Gracias, un saludo.

Responder

Hola tengo un error parecido, en netbeans al conectar con sql2005 de otro equipo en la misma red, el equipo donde tengo netbeans es linux mint y el equipo del sqlserver es un windows, el error es el siguiente:

            //El controlador no pudo establecer una conexión segura
            //con SQL Server con el cifrado de Capa de sockets seguros (SSL). Error:
            //"SQL Server no devolvió una respuesta. Se ha cerrado la conexión.
            //ClientConnectionId:87763805-03a8-4cd8-bc12-03713a3f3501".

y ya agregue la solucion que das a la cadena de conexion y arroja el mismo error, lo raro que tengo otro equipo con las mismas caracteristicas y si conecta.
saludos y gracias.

Responder

by Jose M. Alarcon

Hola:

Lo siento pero desde lInux y Java no tengo experiencia en conectarme a SQL Server. De todos modos, haciendo una búsqueda rápida en Google me sale esto:

stackoverflow.com/.../sql-server-jdbc-error-on-java-8-the-driver-could-not-establish-a-secure-connect

que dice que debes establecer esta parámetro para la JVM:

-Djdk.tls.client.protocols=TLSv1

A ver si te sirve.

También te recomiendo que uses todo siempre en inglés. Así los mensajes de error como este (y muchas otras cosas) te saldrán en este idioma y t resultará mucho más fácil encontrar información y resolver los problemas en Internet. Nos guste o no el mundo tecnológico (y el no tecnológico) está dominado por el inglés, que es la lingua franca actual.

Saludos.

Responder

Augusto Cedeño

Hola José.
Buen artículo.
Me ha sido útil.
Saludos.

Responder

Agregar comentario