Al conectarse a SQL Server, si la aplicación solicita cifrado y la instancia de SQL Server está configurada para admitir el cifrado SSL, el Controlador Microsoft JDBC para SQL Server iniciará el protocolo de enlace SSL. El protocolo de enlace permite al servidor y al cliente negociar los algoritmos criptográficos y de cifrado que se usarán para proteger los datos. Después de completar el protocolo de enlace SSL, el cliente y el servidor pueden enviar los datos cifrados de forma segura. Durante el protocolo de enlace SSL, el servidor envía su certificado de clave pública al cliente. El emisor de un certificado de clave pública se conoce como entidad de certificación (CA, Certificate Authority). El cliente es responsable de validar que la entidad de certificación sea una en la que el cliente confíe.

Si la aplicación no solicita cifrado, el Controlador Microsoft JDBC para SQL Server no exigirá que SQL Server admita el cifrado SSL. Si la instancia de SQL Server no está configurada para exigir el cifrado SSL, se establecerá una conexión sin cifrado. Si la instancia de SQL Server se configura para exigir el cifrado SSL, el controlador habilitará automáticamente el cifrado SSL cuando se ejecute en una máquina virtual Java (JVM) que se haya configurado correctamente; de lo contrario, se finalizará la conexión y el controlador generará un error.

Asegúrese de que el valor pasado a serverName coincide exactamente con el Nombre común (CN) o con el nombre DNS del Nombre alternativo de sujeto (SAN) del certificado de servidor para que una conexión SSL se establezca correctamente.

Para obtener más información acerca de cómo configurar SSL para SQL Server, vea el tema Cifrar conexiones a SQL Server en los Libros en pantalla de SQL Server.

Notas

Con el fin de permitir que las aplicaciones usen el cifrado SSL, el Controlador Microsoft JDBC para SQL Server incorpora las siguientes propiedades de conexión a partir de la versión 1.2: encrypt, trustServerCertificate, trustStore, trustStorePassword y hostNameInCertificate. Para obtener más información, vea Establecer las propiedades de conexión.

En la tabla siguiente se resume cómo se comporta la versión del Controlador Microsoft JDBC para SQL Server en los posibles escenarios de conexiones SSL. Cada escenario usa un conjunto diferente de propiedades de conexión SSL. La tabla incluye:

  • blank: "La propiedad no existe en la cadena de conexión"

  • value: "La propiedad existe en la cadena de conexión y su valor es válido"

  • any: "No importa si la propiedad existe en la cadena de conexión o si su valor es válido"

El mismo comportamiento se aplica para la autenticación de usuario de SQL Server y la autenticación integrada de Windows.

encrypt

trustServerCertificate

hostNameInCertificate

trustStore

trustStorePassword

Comportamiento

false o en blanco

cualquiera

cualquiera

cualquiera

cualquiera

El Controlador Microsoft JDBC para SQL Server no obligará a que SQL Server admita el cifrado SSL. Si el servidor tiene un certificado autofirmado, el controlador inicia el intercambio del certificado SSL. El certificado SSL no será validado y solo se cifran las credenciales (en el paquete de inicio de sesión).

Si el servidor requiere que el cliente sea compatible con el cifrado SSL, el controlador iniciará el intercambio de certificados SSL. El certificado SSL no será validado, pero se cifrará toda la comunicación.

true

true

cualquiera

cualquiera

cualquiera

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL. Observe que si la propiedad trustServerCertificate se establece en "true", el controlador no validará el certificado SSL.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

en blanco

en blanco

en blanco

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador usará la propiedad serverName especificada en la dirección URL de conexión para validar el certificado SSL de servidor y confiar en las reglas de búsqueda en la fábrica del administrador de confianzas con el fin de determinar qué almacén de certificados usar.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

value

en blanco

en blanco

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador validará el valor del asunto del certificado SSL con el valor especificado para la propiedad hostNameInCertificate.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

en blanco

value

value

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador usará el valor de la propiedad trustStore para buscar el archivo trustStore del certificado y el valor de la propiedad trustStorePassword para comprobar la integridad del archivo trustStore.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

en blanco

en blanco

value

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador usará el valor de la propiedad trustStorePassword para comprobar la integridad del archivo trustStore predeterminado.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

en blanco

value

en blanco

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador usará el valor de la propiedad trustStore para buscar la ubicación del archivo trustStore.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

value

en blanco

value

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador usará el valor de la propiedad trustStorePassword para comprobar la integridad del archivo trustStore predeterminado. Además, el controlador usará el valor de la propiedad hostNameInCertificate para validar el certificado SSL.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

value

value

en blanco

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador usará el valor de la propiedad trustStore para buscar la ubicación del archivo trustStore. Además, el controlador usará el valor de la propiedad hostNameInCertificate para validar el certificado SSL.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

true

false o en blanco

value

value

value

El Controlador Microsoft JDBC para SQL Server solicita usar el cifrado SSL con SQL Server.

Si el servidor requiere que el cliente sea compatible con el cifrado SSL o si admite el cifrado, el controlador iniciará el intercambio de certificados SSL.

El controlador usará el valor de la propiedad trustStore para buscar el archivo trustStore del certificado y el valor de la propiedad trustStorePassword para comprobar la integridad del archivo trustStore. Además, el controlador usará el valor de la propiedad hostNameInCertificate para validar el certificado SSL.

Si el servidor no está configurado para ser compatible con el cifrado SSL, el controlador generará un error y terminará la conexión.

Si la propiedad encrypt se establece en true, el Controlador Microsoft JDBC para SQL Server usa el proveedor de seguridad JSSE predeterminado de JVM para negociar el cifrado SSL con SQL Server. El proveedor de seguridad predeterminado puede no admitir todas las características necesarias para negociar el cifrado SSL correctamente. Por ejemplo, es posible que el proveedor de seguridad predeterminado no pueda admitir el tamaño de la clave pública RSA que se usa en el certificado SSL de SQL Server. En este caso, el proveedor de seguridad predeterminado podría generar un error que ocasionará que el controlador JDBC termine la conexión. Para resolver este problema, intente una de las siguientes acciones:

  • Configurar SQL Server con un certificado de servidor que tenga una clave pública RSA más pequeña

  • Configurar la JVM para usar un proveedor de seguridad JSSE diferente en el archivo de propiedades de seguridad "<inicio-java>/lib/security/java.security"

  • Usar una JVM distinta

Validar un certificado SSL de servidor

Durante el protocolo de enlace SSL, el servidor envía su certificado de clave pública al cliente. El controlador JDBC o el cliente tienen que validar que una entidad de certificación en la que el cliente confíe emita el certificado de servidor. El controlador requiere que el certificado de servidor cumpla las condiciones siguientes:

  • Una entidad de certificación de confianza emita el certificado.

  • El certificado debe estar destinado a la autenticación del servidor.

  • El certificado no ha expirado.

  • El Nombre común (CN) del Asunto o un nombre DNS del Nombre alternativo de sujeto (SAN) del certificado coincide exactamente con el valor serverName especificado en la cadena de conexión o, si se especifica, con el valor de la propiedad hostNameInCertificate.

  • Un nombre DNS puede incluir caracteres comodín. Sin embargo, el Controlador Microsoft JDBC para SQL Server no admite coincidencia de caracteres comodín. Es decir, abc.com no coincidirá con *.com, pero *.com sí coincidirá con *.com.

Vea también