Los ejemplos en este tema describen cómo utilizar propiedades de cadena de conexión que permiten a las aplicaciones utilizar el cifrado de Capa de sockets seguros (SSL) en una aplicación Java. Para obtener más información sobre estas nuevas propiedades de cadena de conexión, como son encrypt, trustServerCertificate, trustStore, trustStorePassword y hostNameInCertificate, vea Establecer las propiedades de conexión.

Cuando la propiedad encrypt se establece en true y la propiedad trustServerCertificate se establece en true, el Controlador Microsoft JDBC para SQL Server no validará el certificado SSL de SQL Server. Esto suele ser necesario para permitir conexiones en entornos de prueba, por ejemplo cuando la instancia de SQL Server solo tiene un certificado autofirmado.

El ejemplo de código siguiente demuestra cómo establecer la propiedad trustServerCertificate en una cadena de conexión:

String connectionUrl = 
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true;trustServerCertificate=true";

Cuando la propiedad encrypt se establece en true y la propiedad trustServerCertificate se establece en false, el Controlador Microsoft JDBC para SQL Server validará el certificado SSL de SQL Server. Validar el certificado de servidor es una parte del protocolo de enlace de SSL y asegurarse de que el servidor es el apropiado al que hay que conectarse. Para validar el certificado de servidor, se debe suministrar material de confianza en el momento de la conexión utilizando explícitamente las propiedades de conexión trustStore y trustStorePassword, o el almacén de confianza predeterminado de la máquina virtual Java (JVM) subyacente de forma implícita.

La propiedad trustStore especifica la ruta de acceso (incluido el nombre de archivo) del archivo trustStore de certificado, que contiene la lista de certificados en los que el cliente confía. La propiedad trustStorePassword especifica la contraseña que se usa para comprobar la integridad de los datos de trustStore. Para obtener más información sobre cómo utilizar el almacén de confianza predeterminado de la JVM, vea Configurar el cliente para el cifrado SSL.

El ejemplo de código siguiente muestra cómo establecer las propiedades trustStore y trustStorePassword en una cadena de conexión:

String connectionUrl = 
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword";

El controlador JDBC proporciona una propiedad adicional, hostNameInCertificate, que especifica el nombre de host del servidor. El valor de esta propiedad debe coincidir con la propiedad de asunto del certificado.

El ejemplo de código siguiente muestra cómo utilizar la propiedad hostNameInCertificate en una cadena de conexión:

String connectionUrl = 
    "jdbc:sqlserver://localhost:1433;" +
     "databaseName=AdventureWorks;integratedSecurity=true;" +
     "encrypt=true; trustServerCertificate=false;" +
     "trustStore=storeName;trustStorePassword=storePassword" +
     "hostNameInCertificate=hostName";

También puede establecer el valor de las propiedades de conexión mediante los métodos setter adecuados que proporciona la clase SQLServerDataSource.

Si la propiedad encrypt se establece en true y la propiedad trustServerCertificate se establece en false y si el nombre de servidor de la cadena de conexión no coincide con el nombre de servidor del certificado SSL de SQL Server, se generará el siguiente error: El controlador no pudo establecer una conexión segura con SQL Server con el cifrado de Capa de sockets seguros (SSL). Error: "java.security.cert.CertificateException: No se pudo validar el nombre del servidor en un certificado durante la inicialización de SSL (Capa de sockets seguros)."

Vea también