"La cadena de certificados fue emitida por una autoridad en la que no se confía" al conectar DB en el rol VM desde el sitio web de Azure

192

Estoy experimentando un error al conectar MY DB que está en VM Role (tengo SQL VM Role) del sitio web de Azure. Tanto VM Role como Azure Website están en la zona oeste. Estoy enfrentando el siguiente problema:

SqlException (0x80131904): se estableció una conexión con el servidor, pero se produjo un error durante el proceso de inicio de sesión. (proveedor: proveedor SSL, error: 0: la cadena de certificados fue emitida por una autoridad en la que no se confía).]

Puedo conectarme a mi DB usando SSMS. El puerto 1433 está abierto en mi rol de VM. ¿Qué hay de malo en mi conexión?

ZafarYousafi
fuente

Respuestas:

367

Es probable que no tenga instalado un certificado firmado de CA en el almacén raíz de confianza de su VM SQL.

Si tiene Encrypt=Trueen la cadena de conexión, desactívela (no se recomienda) o agregue lo siguiente en la cadena de conexión:

TrustServerCertificate=True

SQL Server creará un certificado autofirmado si no instala uno para su uso, pero la persona que llama no confiará en él ya que no está firmado por CA, a menos que le indique a la cadena de conexión que confíe en cualquier certificado de servidor defecto.

A largo plazo, recomendaría aprovechar Let's Encrypt para obtener un certificado firmado de CA de una CA confiable conocida de forma gratuita e instalarlo en la VM. No olvide configurarlo para actualizar automáticamente. Puede leer más sobre este tema en los libros en línea de SQL Server bajo el tema "Jerarquía de cifrado" y "Uso del cifrado sin validación".

Thiago Silva
fuente
1
lo siento, malo, TTrusted_Connection = False se estableció en la cadena de conexión. establecerlo verdadero funciona para mí. Gracias de todos modos
ZafarYousafi
1
@ZafarYousafi, debe marcar esta respuesta como correcta.
Termato
55
No es bueno aconsejar la configuración TrustServerCertificatea - trueesto deshabilita la verificación de certificados. Eso no es mejor es que sólo la creación Encryptde false!
Matt Thomas
55
El consejo dado "TrustServerCertificate = True" en esta respuesta puede hacer que el problema desaparezca, pero es un consejo terrible. Arregla la causa, NO los síntomas. La otra parte de la respuesta que sugiere instalar un certificado firmado por CA es el camino a seguir.
Mitch Wheat
En las versiones más recientes de SSMS, encontrará una pequeña opción llamada "Certificado de servidor de confianza" en la pestaña "Propiedades de conexión". Verificar a este chico tiene el mismo efecto que los comandos enumerados anteriormente.
gwynbleidd
87

Si está utilizando SQL Management Studio, vaya a las propiedades de conexión y haga clic en "Servidor de confianza certificado" Si está utilizando SQL Management Studio, vaya a las propiedades de conexión y haga clic en "Servidor de confianza certificado"

ct.tan
fuente
18
No es un mal consejo per se. Diría que puede usarlo cuando necesite conectarse a un servidor de desarrollo y hacer su trabajo, como la codificación. Como desarrollador de software, lucho constantemente con DevOps, que no tiene tiempo para arreglar las cosas rápidamente y no puedo permitirme perder un tiempo precioso contra los plazos. Pesar la exposición de datos al desactivar esta opción depende mucho de su entorno, si es local o remoto, cómo lo configuran los administradores, las restricciones de IP y puede mitigarse fácilmente con otras soluciones. No puede decir que es un mal consejo sin tener un poco de información sobre su infraestructura.
OrizG
Acabas de salvarme el día. Gracias @ ct.tan
Milinda Wickramasinghe
@OrizG Tengo un servidor SQL instalado en una máquina local, y lo uso para proyectos personales. Por el momento, no quiero gastar un centavo con él, así que conseguí un host gratuito y traté de configurar el servidor de forma que pueda firmar los certificados e intercambiarlos entre el servidor y los clientes. Estaré utilizando para acceder a él. Sin embargo, debido al host gratuito, no pude hacerlo con Let's Encrypt. ¿Cuáles son exactamente las desventajas de esta solución, en comparación con realizar correctamente el intercambio de certificados, con certificados firmados de CA de confianza?
ccoutinho
31

Si ve este mensaje de error cuando intenta conectarse mediante SSMS, agréguelo TrustServerCertificate=Truea los Parámetros de conexión adicionales.

vmanne
fuente
23
Mitch, hiciste este mismo comentario en tres respuestas a esta pregunta. Puede ser útil para otros lectores si proporcionó alguna información sustantiva o un enlace de por qué esto es "realmente, muy mal consejo".
zapatos el
@Shoeless Varios comentarios sobre la respuesta aceptada explican.
Tom Blodget
4

Si está intentando acceder a través de Conexiones de datos en Visual Studio 2015 y obtiene el error anterior, vaya a Avanzado y configure el TrustServerCertificate=True error para que desaparezca.

Bhavjot
fuente
9
No es un mal consejo per se. Diría que puede usarlo cuando necesite conectarse a un servidor de desarrollo y hacer su trabajo, como la codificación. Como desarrollador de software, lucho constantemente con DevOps, que no tiene tiempo para arreglar las cosas rápidamente y no puedo permitirme perder un tiempo precioso contra los plazos. Pesar la exposición de datos al desactivar esta opción depende mucho de su entorno, si es local o remoto, cómo lo configuran los administradores, las restricciones de IP y puede mitigarse fácilmente con otras soluciones. No puede decir que es un mal consejo sin tener un poco de información sobre su infraestructura.
OrizG
1

Tuve el mismo problema al acceder a SQLServer desde IIS. Agregar TrustServerCertificate = True no ayudó.

Podría ver un comentario en los documentos de MS: asegúrese de que la cuenta del servicio SQLServer tenga acceso al Certificado TLS que está utilizando. (Servicio NT \ MSSQLSERVER)

Abra la tienda personal y haga clic derecho en el certificado -> administre claves privadas -> Agregue la cuenta de servicio SQL y otorgue control total.

Reinicie el servicio SQL. Funcionó.

Kaavya T
fuente
0

Lo mismo se puede lograr desde el propio cliente ssms. Simplemente abra los ssms, inserte el nombre del servidor y luego, desde las opciones bajo las propiedades de conexión del encabezado, asegúrese de que el certificado del servidor Trust esté marcado.

Manas
fuente
0

Recibí este problema al importar datos de Excel en SQLDatabase a través de SSMS. La solución es configurar TrustServerCertificate = Trueen la sección de seguridad

Kanna Reddy
fuente
0

Me encontré con este error al intentar ejecutar el generador de perfiles, a pesar de que mi conexión tenía el certificado del servidor Trust verificado y lo agregué TrustServerCertificate=Trueen la Sección Avanzada. Cambié a una instancia de SSMS que se ejecutaba como administrador y el generador de perfiles comenzó sin problemas. (Anteriormente había encontrado que cuando mis conexiones incluso a locales tomaban mucho tiempo para conectarse, la ejecución como administrador ayudó).

Cuenta
fuente