TLS Configuration Requirements for Automox

TLS Configuration Requirements

Automox requires secure Transport Layer Security (TLS) configurations to protect communication between the Automox agent and the cloud console. This document details supported protocols, cipher suites, and system requirements for maintaining connectivity.

Supported Protocols and Cryptography

To align with industry best practices and AWS security policies, Automox supports TLS 1.2 and TLS 1.3. Systems must use cryptographic primitives that provide forward secrecy and authenticated encryption.

Technical Standards

  • Protocols: TLS 1.2, TLS 1.3
  • Hashing Algorithms: SHA256, SHA384
  • Keys:
    • RSA
    • ECDSA (where dual-stack certificates are supported)
  • Key Exchange: ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)
  • Encryption Algorithms: AES-GCM, ChaCha20-Poly1305

Legacy algorithms, including static RSA key exchange and deprecated hashing functions, are unsupported for agent-to-console communication.

System Requirements

Administrators must ensure managed endpoints meet these cryptographic requirements to prevent connection failures.

Supported Configuration Reference

Component

Requirement

Operating Systems

See Supported Operating Systems

PowerShell Version

See Automox Agent Requirements

Key Exchange

ECDHE must be enabled in SCHANNEL

Cipher Policy

Must support at least one suite from AWS CloudFront TLSv1.2_2019 or newer

Registry Configuration Paths

Windows TLS behavior is controlled by these registry keys:

  • ECDH Key Exchange: HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\ECDH
  • SSL Cipher Order: HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002
  • Enable strong cryptography for .NET applications (including PowerShell)
    HKLM:\SOFTWARE\Microsoft\.NETFramework\v2.0.50727
    HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319
    HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727
    HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319

For detailed guidance on configuring these registry paths or troubleshooting environment issues, see the Automox documentation:

For manual configuration, administrators can use the IIS Crypto tool by Nartac Software. It offers a graphical interface to manage SCHANNEL registry keys, enable TLS 1.2 and 1.3, disable insecure cryptographic methods, and reorder cipher suites.

Connectivity Validation

All agent operations require successful TLS negotiation. Verify connectivity by testing outbound HTTPS requests to the primary Automox infrastructure endpoints.

Validation Endpoints

Endpoint

Expected Result

Note

https://api.automox.com

Success

Primary API communication

https://storage-cdn.prod.automox.com

Success (403 Forbidden)

A 403 response confirms a successful TLS handshake

Manual Validation (PowerShell)

To verify that a system can establish a secure connection with the required TLS protocols, run this command in PowerShell. The script uses .NET sockets to confirm the negotiated protocol version:

Copy

Test-AutomoxConnectivity.ps1

#!/usr/bin/env pwsh
<#
.SYNOPSIS
    Tests connectivity to Automox endpoints and verifies TLS 1.2+ configuration.

.DESCRIPTION
    This script checks if the client computer can successfully connect to Automox endpoints
    and verifies that PowerShell is configured to use TLS 1.2 or higher.

.EXAMPLE
    .\Test-AutomoxConnectivity.ps1
#>[CmdletBinding()]
param()

#region Functions

# Helper function to display color-coded test results
function Write-Result {
    param([string]$Test, [bool]$Pass, [string]$Message)
    $status = if ($Pass) { "PASS" } else { "FAIL" }
    $color = if ($Pass) { "Green" } else { "Red" }
    Write-Host "[$status] " -ForegroundColor $color -NoNewline
    Write-Host "$Test`: $Message"}

# Tests HTTP/HTTPS connectivity to an endpoint
# Can optionally force a specific TLS version for testing
# Returns $true if the response code matches expected codes, $false otherwise
function Test-Endpoint {
    param([string]$Url, [int[]]$ExpectedCodes, [System.Net.SecurityProtocolType]$ForceTLS)

    # Store original TLS setting to restore later
    $original = [Net.ServicePointManager]::SecurityProtocol
    try {
        # If ForceTLS parameter was provided, temporarily override the TLS setting
        if ($PSBoundParameters.ContainsKey('ForceTLS')) {
            [Net.ServicePointManager]::SecurityProtocol = $ForceTLS
        }

        # Attempt to connect to the endpoint
        $response = Invoke-WebRequest -Uri $Url -Method Get -UseBasicParsing -ErrorAction Stop
        return $response.StatusCode -in $ExpectedCodes
    } catch {
        # Some endpoints return errors but still establish connection (e.g., 403 for CDN)
        if ($_.Exception.Response) {
            $code = [int]$_.Exception.Response.StatusCode
            return $code -in $ExpectedCodes
        }
        return $false
    } finally {
        # Always restore original TLS setting
        [Net.ServicePointManager]::SecurityProtocol = $original
    }
}

#endregion

#region Main Script

# Display header
Write-Host "`n================================================" -ForegroundColor Cyan
Write-Host "  Automox Connectivity Test" -ForegroundColor Cyan
Write-Host "================================================`n" -ForegroundColor Cyan

#region Smoke Test - Verify basic network connectivity before detailed testing

Write-Host "=== Network Smoke Test ===" -ForegroundColor Cyan
$endpoints = @("api.automox.com", "storage-cdn.prod.automox.com")
$smokePass = $true

# Test DNS resolution for both Automox endpoints
foreach ($endpoint in $endpoints) {
    try {
        $ips = [System.Net.Dns]::GetHostAddresses($endpoint)
        Write-Result "DNS: $endpoint" $true "Resolved to $($ips[0].IPAddressToString)"    } catch {
        Write-Result "DNS: $endpoint" $false "Failed to resolve"        $smokePass = $false
    }
}

# Test basic TCP connectivity on port 443 (HTTPS)
try {
    $tcp = New-Object System.Net.Sockets.TcpClient
    $connect = $tcp.ConnectAsync("api.automox.com", 443)
    if ($connect.Wait(5000) -and $tcp.Connected) {
        Write-Result "TCP: api.automox.com:443" $true "Connection successful"        $tcp.Close()
    } else {
        Write-Result "TCP: api.automox.com:443" $false "Connection timeout"        $smokePass = $false
    }
    $tcp.Dispose()
} catch {
    Write-Result "TCP: api.automox.com:443" $false "Connection failed"    $smokePass = $false
}

# If smoke test fails, abort - no point testing TLS if basic connectivity is broken
if (-not $smokePass) {
    Write-Host "`nSMOKE TEST FAILED - Check internet, DNS, and firewall settings" -ForegroundColor Red
    exit 2
}

#endregion

#region TLS Configuration Check - Verify PowerShell defaults to TLS 1.2 or higher

Write-Host "`n=== TLS Configuration ===" -ForegroundColor Cyan

# Get the default TLS protocols configured for this PowerShell session
$protocols = [Net.ServicePointManager]::SecurityProtocol

# Check if TLS 1.2 and 1.3 are enabled using bitwise AND
$hasTLS12 = $protocols -band [Net.SecurityProtocolType]::Tls12
$hasTLS13 = try { $protocols -band [Net.SecurityProtocolType]::Tls13 } catch { $false }

# Automox requires at least TLS 1.2
$isSecure = $hasTLS12 -or $hasTLS13

# Display current TLS configuration
Write-Host "Default: $protocols"Write-Host "  TLS 1.2: $(if ($hasTLS12) { 'Enabled' } else { 'Disabled' })" -ForegroundColor $(if ($hasTLS12) { 'Green' } else { 'Red' })
Write-Host "  TLS 1.3: $(if ($hasTLS13) { 'Enabled' } else { 'Disabled' })" -ForegroundColor $(if ($hasTLS13) { 'Green' } else { 'Gray' })
Write-Result "TLS 1.2+ Available" $isSecure $(if ($isSecure) { "Ready for Automox" } else { "Not configured" })

#endregion

#region Connectivity Testing - Test endpoints with different TLS configurations

# Define test cases: first with default config, then forcing specific TLS versions
$testCases = @(
    @{ Label = "Default Config"; TLS = $null }                                   # Test with system defaults
    @{ Label = "TLS 1.2 Forced"; TLS = [Net.SecurityProtocolType]::Tls12 }     # Force TLS 1.2 only
)

# Add TLS 1.3 test if the PowerShell version supports it
try {
    $tls13 = [Net.SecurityProtocolType]::Tls13
    $testCases += @{ Label = "TLS 1.3 Forced"; TLS = $tls13 }
} catch { }

# Store results from each test case
$results = @{}

# Run connectivity tests for each configuration
foreach ($test in $testCases) {
    Write-Host "`n=== Testing: $($test.Label) ===" -ForegroundColor Cyan

    # Set up parameters for both endpoints
    # API expects HTTP 200, CDN expects HTTP 403 (no direct access without path)
    $apiParams = @{ Url = "https://api.automox.com"; ExpectedCodes = @(200) }
    $cdnParams = @{ Url = "https://storage-cdn.prod.automox.com"; ExpectedCodes = @(403) }

    # If this test case specifies a TLS version, add it to the parameters
    if ($test.TLS) {
        $apiParams['ForceTLS'] = $test.TLS
        $cdnParams['ForceTLS'] = $test.TLS
    }

    # Test both endpoints
    $apiSuccess = Test-Endpoint @apiParams
    $cdnSuccess = Test-Endpoint @cdnParams

    # Display results
    Write-Result "api.automox.com" $apiSuccess $(if ($apiSuccess) { "Connected" } else { "Failed" })
    Write-Result "storage-cdn.prod.automox.com" $cdnSuccess $(if ($cdnSuccess) { "Connected" } else { "Failed" })

    # Store results for summary
    $results[$test.Label] = @{ API = $apiSuccess; CDN = $cdnSuccess }
}

#endregion

#region Summary - Display quick overview of all test results

Write-Host "`n=== Summary ===" -ForegroundColor Cyan
foreach ($test in $testCases) {
    $label = $test.Label
    $r = $results[$label]
    $pass = $r.API -and $r.CDN  # Both endpoints must pass
    Write-Host "$label`: " -NoNewline
    Write-Host $(if ($pass) { "PASS" } else { "FAIL" }) -ForegroundColor $(if ($pass) { "Green" } else { "Red" })
}

#endregion

#region Recommendation - Provide actionable guidance based on test results

Write-Host "`n=== Recommendation ===" -ForegroundColor Cyan

# Determine what worked and what didn't
$defaultWorks = $results["Default Config"].API -and $results["Default Config"].CDN
$tls12Works = $results["TLS 1.2 Forced"].API -and $results["TLS 1.2 Forced"].CDN

# Scenario 1: Everything works with default config - system is properly configured
if ($isSecure -and $defaultWorks) {
    Write-Host "System properly configured for TLS and Automox connection!" -ForegroundColor Green
    exit 0

# Scenario 2: Default config lacks TLS 1.2+, but TLS 1.2 works when forced
# This means the system CAN do TLS 1.2, it's just not configured as the default
} elseif (-not $isSecure -and $tls12Works) {
    Write-Host "ACTION REQUIRED: Update system TLS configuration" -ForegroundColor Red
    Write-Host ""    Write-Host "Your system supports TLS 1.2 but doesn't use it by default." -ForegroundColor Yellow
    Write-Host "Automox requires TLS 1.2+ to be enabled by default." -ForegroundColor Yellow
    Write-Host ""    Write-Host "To fix:" -ForegroundColor White
    Write-Host "  1. Install latest Windows updates" -ForegroundColor White
    Write-Host "  2. Install .NET Framework 4.7 or higher" -ForegroundColor White
    Write-Host "  3. Configure registry settings for TLS 1.2" -ForegroundColor White
    Write-Host ""    Write-Host "Details: https://help.automox.com/hc/en-us/articles/31580534058132-Proxy-Blocks-Downloads-from-Automox-Due-to-TLS-Setting#h_01JK6PFYMRZT1VYNBHM07HD6GM" -ForegroundColor Cyan
    exit 1

# Scenario 3: Even TLS 1.2 doesn't work - likely firewall/network issue
} elseif (-not $tls12Works) {
    Write-Host "CRITICAL: Cannot connect even with TLS 1.2" -ForegroundColor Red
    Write-Host "Check firewall, proxy, or network restrictions" -ForegroundColor Yellow
    exit 1

# Scenario 4: Unknown issue - shouldn't normally hit this
} else {
    Write-Host "Configuration issues detected - review results above" -ForegroundColor Yellow
    exit 1
}

#endregion

#endregion

Implementation and Remediation

Automated Remediation

Automox offers automated tools to evaluate and enforce TLS standards across your environment via the Automox Worklet Catalog.

Warning: Changing TLS standards and cipher suite order can affect Windows applications relying on SCHANNEL. Test thoroughly in a lab before broad deployment.

Manual Remediation

For manual updates, follow the Automox Knowledge Base article: Force PowerShell to Use TLS 1.2. It explains how to adjust registry and session settings to prioritize secure protocols in PowerShell and .NET Framework.

Note: These requirements align with AWS TLS standards and improve Automox platform security.