Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os exemplos neste artigo descrevem como usar propriedades de cadeia de ligação que permitem a aplicações utilizar encriptação Transport Layer Security (TLS) numa aplicação Java. Para mais informações sobre estas novas propriedades de cadeia de ligação, como encrypt, trustServerCertificate, trustStore, trustStorePassword e hostNameInCertificate, consulte Definir as propriedades da ligação.
Configuração da ligação
Quando a propriedade encrypt está definida como true e a propriedade trustServerCertificate está definida como true, o driver Microsoft JDBC para SQL Server não valida o certificado TLS do SQL Server. Esta configuração é comum para permitir ligações em ambientes de teste, como quando a instância do SQL Server tem apenas um certificado auto-assinado.
O exemplo de código seguinte demonstra como definir a propriedade trustServerCertificate numa cadeia de ligação:
String connectionUrl =
"jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;" +
"encrypt=true;trustServerCertificate=true";
Quando a propriedade de encriptação está definida como verdadeira e a propriedade trustServerCertificate está definida como falsa, o driver Microsoft JDBC para SQL Server irá validar o certificado TLS do SQL Server. Validar o certificado do servidor faz parte do handshake TLS e garante que o servidor é o correto para ligar. Para validar o certificado do servidor, o material de confiança deve ser fornecido no momento da conexão, seja usando explicitamente as propriedades de conexão trustStore e trustStorePassword, ou usando implicitamente o armazenamento de confiança padrão da Máquina Virtual Java (JVM) subjacente.
A propriedade trustStore especifica o caminho (incluindo o nome do ficheiro) para o ficheiro de certificados trustStore, que contém a lista de certificados em que o cliente confia. A propriedade trustStorePassword especifica a palavra-passe usada para verificar a integridade dos dados do trustStore. Para mais informações sobre a utilização do armazenamento de confiança padrão da JVM, consulte Configurar o cliente para encriptação.
O exemplo de código seguinte demonstra como definir as propriedades trustStore e trustStorePassword numa cadeia de ligação:
String connectionUrl =
"jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;" +
"encrypt=true; trustServerCertificate=false;" +
"trustStore=storeName;trustStorePassword=storePassword";
O Driver JDBC fornece outra propriedade, hostNameInCertificate, que especifica o nome do host do servidor. O valor desta propriedade deve corresponder à propriedade objeto do certificado.
O seguinte exemplo de código demonstra como usar a propriedade hostNameInCertificate numa cadeia de ligação:
String connectionUrl =
"jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;" +
"encrypt=true; trustServerCertificate=false;" +
"trustStore=storeName;trustStorePassword=storePassword;" +
"hostNameInCertificate=hostName";
Observação
Em alternativa, pode definir o valor das propriedades de ligação usando os métodos de setter apropriados fornecidos pela classe SQLServerDataSource .
Se a propriedade encrypt for verdadeira, a propriedade trustServerCertificate for falsa, e se o nome do servidor na string de ligação não corresponder ao nome do servidor no certificado TLS, será emitido o seguinte erro: The driver couldn't establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "java.security.cert.CertificateException: Failed to validate the server name in a certificate during Secure Sockets Layer (SSL) initialization.". A partir da versão 7.2, o driver suporta a correspondência de padrões de curinga no rótulo mais à esquerda do nome do servidor no certificado TLS.