SQL server enforces minimal TLS version 1.2 or 1.3
Azure SQL logical servers are assessed for the configured minimum TLS version for client connections. The finding determines whether the minimal accepted version aligns with recommended modern values such as 1.2 or 1.3.
Risk
Without a modern minimum, clients can negotiate weak TLS or be downgraded, enabling MITM and decryption. This jeopardizes confidentiality (credential/data exposure) and integrity (query tampering), and may disrupt availability via session resets during handshake interference.
Run this check with Prowler
Run in Prowler Cloudprowler azure --checks sqlserver_recommended_minimal_tls_versionRecommendation
Set the minimum TLS to 1.2 or higher (prefer 1.3 when supported). Upgrade client libraries and OS trust stores; remove legacy protocols and weak ciphers to prevent downgrades. Validate compatibility before enforcement and monitor connections for outdated TLS. Uphold encryption in transit and defense in depth.
Remediation
CLI
az sql server update -n <SQL_SERVER_NAME> -g <RESOURCE_GROUP> --set minimalTlsVersion="1.2"Terraform
# Enforce minimum TLS 1.2 on Azure SQL logical server
resource "azurerm_mssql_server" "<example_resource_name>" {
name = "<example_resource_name>"
resource_group_name = "<example_resource_name>"
location = "<example_location>"
version = "12.0"
administrator_login = "<example_admin>"
administrator_login_password = "<example_password>"
minimum_tls_version = "1.2" # Critical: Enforces TLS 1.2+ for client connections
}NativeIaC
// Update Azure SQL logical server to enforce minimum TLS 1.2
resource sqlServer 'Microsoft.Sql/servers@2021-11-01' = {
name: '<example_resource_name>'
location: resourceGroup().location
properties: {
minimalTlsVersion: '1.2' // Critical: Enforces TLS 1.2+ for client connections
}
}Other
Check Code
from typing import List
from prowler.lib.check.models import Check, Check_Report_Azure
from prowler.providers.azure.services.sqlserver.sqlserver_client import sqlserver_client
class sqlserver_recommended_minimal_tls_version(Check):
def execute(self) -> List[Check_Report_Azure]:
findings = []
recommended_minimal_tls_versions = sqlserver_client.audit_config.get(
"recommended_minimal_tls_versions", ["1.2", "1.3"]
)
for subscription, sql_servers in sqlserver_client.sql_servers.items():
subscription_name = sqlserver_client.subscriptions.get(
subscription, subscription
)
for sql_server in sql_servers:
report = Check_Report_Azure(
metadata=self.metadata(), resource=sql_server
)
report.subscription = subscription
report.status = "FAIL"
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription_name} ({subscription}) is using TLS version {sql_server.minimal_tls_version} as minimal accepted which is not recommended. Please use one of the recommended versions: {', '.join(recommended_minimal_tls_versions)}."
if sql_server.minimal_tls_version in recommended_minimal_tls_versions:
report.status_extended = f"SQL Server {sql_server.name} from subscription {subscription_name} ({subscription}) is using version {sql_server.minimal_tls_version} as minimal accepted which is recommended."
report.status = "PASS"
findings.append(report)
return findingsReferences
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/azure/Sql/db-minimum-tls-version-check.html
- https://learn.microsoft.com/en-us/azure/azure-sql/database/connectivity-settings?view=azuresql&tabs=azure-portal#configure-minimum-tls-version
- https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/minimal-tls-version-configure?view=azuresql