Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O go-mssqldb driver suporta múltiplos modos de encriptação e estratégias de validação de certificados para ligações ao SQL Server e ao SQL do Azure. Este artigo explica cada modo de encriptação, como configurar a validação de certificados e quando usar o modo estrito TDS 8.0.
Escolha uma configuração TLS
Use esta tabela para escolher a opção mais segura que se adapte ao seu ambiente antes de ajustar parâmetros individuais.
| Scenario | Definições recomendadas | Porquê |
|---|---|---|
| SQL do Azure ou SQL Server 2022 e versões posteriores, e queres a proteção padrão mais forte | encrypt=strict |
O TDS 8.0 realiza o handshake TLS antes da negociação do TDS e valida sempre o certificado. |
| O certificado do servidor é encadeado a uma CA pública ou corporativa de confiança | encrypt=true |
A validação padrão de certificados é geralmente suficiente quando o nome do host e a cadeia de confiança já estão corretos. |
| O servidor usa uma CA privada que não está no system trust store | encrypt=true&certificate=/path/to/ca-cert.pem |
Adiciona o certificado da CA a um pool de confiança personalizado e mantém a validação normal da cadeia. |
| O servidor usa um certificado auto-assinado e queres fixar o certificado | encrypt=true&serverCertificate=/path/to/server.pem |
Compara o certificado exato do servidor byte por byte em vez de depender de uma cadeia CA. |
| Apenas ambientes de desenvolvimento local ou de teste temporários | encrypt=true&TrustServerCertificate=true |
Mantém a encriptação ativada, mas ignora a validação da identidade do servidor. Não utilize esta configuração em produção. |
Modos de encriptação
Defina o encrypt parâmetro de ligação para um dos seguintes valores:
| valor | Comportamento |
|---|---|
strict |
Encriptação TDS 8.0. O aperto de mão TLS acontece antes da negociação da ligação TDS. Requer SQL Server 2022 ou SQL do Azure. |
true ou mandatory |
A ligação é encriptada após o handshake pré-login do TDS. |
false ou optional |
A encriptação é usada apenas se o servidor assim o exigir. Este é o padrão quando encrypt não está especificado. O SQL do Azure requer sempre encriptação do lado do servidor, por isso as ligações ao SQL do Azure são encriptadas independentemente desta definição. |
disable |
Sem encriptação. Não recomendado para produção. |
Exemplo
Ative a encriptação na cadeia de ligação usando o encrypt parâmetro:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true
Validação do certificado
Quando ativas a encriptação (encrypt=true ou encrypt=strict), o driver valida o certificado do servidor, a menos que definas TrustServerCertificate=true. Existem duas abordagens independentes para esta validação.
Validação em cadeia utilizando o certificate parâmetro
Forneça um ficheiro de certificado PEM ou DER. O driver adiciona o certificado a um repositório de confiança personalizado e realiza a validação padrão da cadeia X.509 em relação a esse repositório:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem
Comparação ao nível de byte usando o serverCertificate parâmetro
Observação
O serverCertificate parâmetro foi introduzido no driver v1.9.6.
Forneça um ficheiro PEM ou DER contendo exatamente o certificado do servidor. O driver compara o certificado do servidor byte por byte com o ficheiro fornecido. O driver não realiza a validação da cadeia. Esta abordagem é útil para certificados auto-assinados:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&serverCertificate=/path/to/server.pem
Substituição do nome do host
Por defeito, o driver valida que o Nome Comum (CN) ou o Nome Alternativo do Sujeito (SAN) do certificado corresponde ao nome do host do servidor. Usar hostnameincertificate para sobrepor o nome de host esperado:
sqlserver://<user>:<password>@10.0.0.5:1433?database=AdventureWorks2025&encrypt=true&hostnameincertificate=<server>.domain.com
Saltar a validação do certificado
Defina TrustServerCertificate=true para saltar toda a validação de certificados. A ligação continua encriptada, mas a identidade do servidor não é verificada:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=true
Caution
Definir TrustServerCertificate=true expõe a ligação a ataques de adversário no meio. Use esta opção apenas para desenvolvimento e testes.
TDS 8.0 em modo estrito
O TDS 8.0 (encriptação estrita) realiza o handshake TLS antes de qualquer negociação do protocolo TDS. Esta abordagem impede que um atacante faça downgrade de toda a ligação. O TDS 8.0 requer SQL Server 2022 ou SQL do Azure:
sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=strict
No modo estrito, o TrustServerCertificate parâmetro é ignorado. A validação de certificados é sempre efetuada, utilizando por defeito o repositório de certificados fidedignos do sistema. Pode fornecer certificate ou serverCertificate para validação personalizada.
Versão mínima do TLS
Use o tlsmin parâmetro para impor uma versão 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.
Resumo dos parâmetros de encriptação
| Parâmetro | Predefinição | Description |
|---|---|---|
encrypt |
false |
Modo de encriptação. O SQL do Azure exige sempre encriptação do lado do servidor, independentemente desta configuração. |
TrustServerCertificate |
Depende de encrypt |
Saltar a validação de certificados quando true. O padrão é false quando encrypt é especificado e true quando encrypt é omitido. |
certificate |
- | Caminho do ficheiro PEM/DER para validação da cadeia. |
serverCertificate |
- | Caminho do ficheiro PEM/DER para comparação byte a byte. |
hostnameincertificate |
- | Anular o nome esperado do anfitrião no certificado. |
tlsmin |
- | Versão TLS mínima. |