Partilhar via


Conectando-se com criptografia

Baixar driver JDBC

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.