Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El go-mssqldb controlador soporta múltiples modos de cifrado y estrategias de validación de certificados para conexiones a SQL Server y Azure SQL. Este artículo explica cada modo de cifrado, cómo configurar la validación de certificados y cuándo usar el modo estricto TDS 8.0.
Elige una configuración TLS
Utiliza esta tabla para elegir la opción más segura que se adapte a tu entorno antes de ajustar parámetros individuales.
| Escenario | Configuración recomendada | Por qué |
|---|---|---|
| Azure SQL o SQL Server 2022 y versiones posteriores, y quieres la protección por defecto más fuerte | encrypt=strict |
TDS 8.0 realiza el handshake TLS antes de la negociación TDS y siempre valida el certificado. |
| El certificado del servidor se encadena a una CA pública o corporativa de confianza | encrypt=true |
La validación estándar de certificados suele ser suficiente cuando el nombre del host y la cadena de confianza ya son correctos. |
| El servidor utiliza una CA privada que no está en el almacén de confianza del sistema | encrypt=true&certificate=/path/to/ca-cert.pem |
Añade el certificado de la CA a un pool de confianza personalizado y mantiene la validación normal de la cadena. |
| El servidor utiliza un certificado autofirmado y deseas usar anclaje de certificados | encrypt=true&serverCertificate=/path/to/server.pem |
Compara el certificado exacto del servidor byte por byte en lugar de depender de una cadena de CA. |
| Desarrollo local o entornos de prueba temporales solo | encrypt=true&TrustServerCertificate=true |
Mantiene el cifrado activado, pero se salta la validación de identidad del servidor. No uses esta configuración en producción. |
Modos de cifrado
Establezca el encrypt parámetro de conexión en uno de los siguientes valores:
| Value | Comportamiento |
|---|---|
strict |
Cifrado TDS 8.0. El apretón de manos TLS ocurre antes de la negociación de la conexión TDS. Requiere SQL Server 2022 o Azure SQL. |
true o mandatory |
La conexión se cifra después del intercambio de preinicio de sesión de TDS. |
false o optional |
El cifrado se usa solo si el servidor lo requiere. Este es el valor por defecto cuando encrypt no está especificado. Azure SQL siempre requiere cifrado en el lado del servidor, por lo que las conexiones a Azure SQL están cifradas independientemente de esta configuración. |
disable |
Sin cifrado. No se recomienda para el entorno de producción. |
Example
Activa el cifrado en la cadena de conexión usando el encrypt parámetro:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true
Validación de certificados
Cuando activas el cifrado (encrypt=true o encrypt=strict), el controlador valida el certificado del servidor a menos que configures TrustServerCertificate=true. Existen dos enfoques independientes para esta validación.
Validación en cadena utilizando el certificate parámetro
Proporciona un archivo de certificados PEM o DER. El controlador añade el certificado a un pool de confianza personalizado y realiza la validación estándar de la cadena X.509 contra ese pool:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem
Comparación a nivel de byte usando el serverCertificate parámetro
Note
El serverCertificate parámetro se introdujo en el controlador v1.9.6.
Proporciona un archivo PEM o DER que contenga el certificado exacto del servidor. El controlador compara el certificado byte por byte del servidor con el archivo proporcionado. El controlador no realiza la validación de la cadena. Este enfoque es útil para certificados autofirmados:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&serverCertificate=/path/to/server.pem
Sustitución del nombre de host
Por defecto, el controlador valida que el Nombre Común (CN) o el Nombre Alternativo de Sujeto (SAN) del certificado coincide con el nombre del host del servidor. Úsase hostnameincertificate para anular el nombre de host esperado:
sqlserver://<user>:<password>@10.0.0.5:1433?database=AdventureWorks2025&encrypt=true&hostnameincertificate=<server>.domain.com
Omitir la validación de certificados
Configure TrustServerCertificate=true para omitir la validación de todos los certificados. La conexión sigue cifrada, pero la identidad del servidor no está verificada:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=true
Precaución
Configurar TrustServerCertificate=true expone la conexión a ataques de adversario en medio. Utiliza esta opción solo para desarrollo y pruebas.
Modo estricto TDS 8.0
TDS 8.0 (cifrado estricto) realiza el handshake TLS antes de cualquier negociación del protocolo TDS. Este enfoque evita que un atacante degrade toda la conexión. TDS 8.0 requiere SQL Server 2022 o Azure SQL:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=strict
En modo estricto, el TrustServerCertificate parámetro se ignora. La validación de certificados siempre ocurre, utilizando por defecto el almacén de confianza del sistema. Puedes proporcionar certificate o serverCertificate para una validación personalizada.
Versión de TLS mínima
Utiliza el tlsmin parámetro para imponer una versión mínima de TLS:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&tlsmin=1.2
Valores válidos: 1.0, 1.1, 1.2, 1.3.
Resumen de parámetros de cifrado
| Parámetro | Predeterminado | Description |
|---|---|---|
encrypt |
false |
Modo cifrado. Azure SQL siempre requiere cifrado en el lado del servidor, independientemente de esta configuración. |
TrustServerCertificate |
Depende de encrypt |
Omitir la validación del certificado cuando true. El valor por defecto es false cuándo encrypt se especifica y true cuándo encrypt se omite. |
certificate |
- | Ruta del archivo PEM/DER para la validación de la cadena. |
serverCertificate |
- | Ruta del archivo PEM/DER para la comparación a nivel de bytes. |
hostnameincertificate |
- | Anular el nombre esperado del anfitrión en el certificado. |
tlsmin |
- | Versión mínima TLS. |