Skip to main content

Overview

FreeTAKServer implements multiple layers of security:
  • SSL/TLS Encryption: Secure communications using X.509 certificates
  • Client Certificate Authentication: Mutual TLS authentication for TAK clients
  • Token-Based Authentication: Bearer tokens for REST API access
  • Certificate Revocation: Certificate Revocation List (CRL) support
  • User Management: System and API user authentication

SSL/TLS Configuration

SSL/TLS encryption is essential for protecting tactical data in production deployments.

Certificate Paths

string
default:"/opt/fts/certs"
Root directory for all certificates and keysEnvironment variable: FTS_CERTS_PATHYAML: Filesystem.FTS_CERTS_PATH

Server Certificate

string
default:"/opt/fts/certs/server.key"
Path to server private key (PEM format)Environment variable: FTS_SERVER_KEYDIRYAML: Certs.FTS_SERVER_KEYDIR
string
default:"/opt/fts/certs/server.pem"
Path to server certificate (PEM format)Environment variable: FTS_SERVER_PEMDIRYAML: Certs.FTS_SERVER_PEMDIR
string
default:"/opt/fts/certs/server.key.unencrypted"
Path to unencrypted server key (used internally by services)Environment variable: FTS_UNENCRYPTED_KEYDIRYAML: Certs.FTS_UNENCRYPTED_KEYDIR
string
default:"/opt/fts/certs/server.p12"
Path to PKCS#12 format certificate bundle (includes private key and certificate)Environment variable: FTS_SERVER_P12DIRYAML: Certs.FTS_SERVER_P12DIR

Certificate Authority (CA)

string
default:"/opt/fts/certs/ca.pem"
Path to Certificate Authority certificateEnvironment variable: FTS_CADIRYAML: Certs.FTS_CADIR
string
default:"/opt/fts/certs/ca.key"
Path to Certificate Authority private key (for signing client certificates)Environment variable: FTS_CAKEYDIRYAML: Certs.FTS_CAKEYDIR

Test Client Certificates

string
default:"/opt/fts/certs/server.key"
Path to test client certificateEnvironment variable: FTS_TESTCLIENT_PEMDIRYAML: Certs.FTS_TESTCLIENT_PEMDIR
string
default:"/opt/fts/certs/server.pem"
Path to test client private keyEnvironment variable: FTS_TESTCLIENT_KEYDIRYAML: Certs.FTS_TESTCLIENT_KEYDIR

Client Certificate Password

string
default:"supersecret"
Password used when generating client certificate packages (P12 files)Environment variable: FTS_CLIENT_CERT_PASSWORDYAML: Certs.FTS_CLIENT_CERT_PASSWORD
Change the default client certificate password in production! This password protects client certificate files.

Client Certificate Packages

string
default:"/opt/fts/certs/clientPackages"
Directory for storing generated client certificate packagesEnvironment variable: FTS_CLIENT_PACKAGES_PATHYAML: Filesystem.FTS_CLIENT_PACKAGES_PATH

Certificate Revocation

string
default:"/opt/fts/certs/FTS_CRL.json"
Path to Certificate Revocation List (CRL) file in JSON formatEnvironment variable: FTS_CRLDIRYAML: Certs.FTS_CRLDIR
The CRL allows administrators to revoke compromised or unauthorized client certificates.

CRL File Format

Federation Security

string
default:"/opt/fts/certs/server.pem"
Certificate used for federation connections with other TAK serversEnvironment variable: FTS_FEDERATION_CERTDIRYAML: Certs.FTS_FEDERATION_CERTDIR
string
default:"/opt/fts/certs/server.key"
Private key for federation connectionsEnvironment variable: FTS_FEDERATION_KEYDIRYAML: Certs.FTS_FEDERATION_KEYDIR
string
default:"defaultpass"
Password for the federation private keyEnvironment variable: FTS_FEDERATION_KEYPASSYAML: Certs.FTS_FEDERATION_KEYPASS

REST API Authentication

The REST API uses HTTP Bearer token authentication.

Secret Key

string
default:"vnkdjnfjknfl1232#"
Secret key for cryptographic operations, session management, and token signingEnvironment variable: FTS_SECRET_KEYYAML: System.FTS_SECRET_KEY
The default SecretKey MUST be changed in production! Generate a cryptographically secure random string.

WebSocket Key

string
default:"YourWebsocketKey"
Authentication key for WebSocket connectionsEnvironment variable: FTS_WEBSOCKET_KEYYAML: Certs.FTS_WEBSOCKET_KEY

Authentication Implementation

From FreeTAKServer/services/rest_api_service/controllers/authentication.py:

User Types

SystemUser: Administrative users with full access
  • Stored in SystemUser table
  • Default admin user created on first run
  • All API calls are logged
APIUser: Application users with limited access
  • Stored in APIUser table
  • Created via user management API
  • No automatic logging

CLI Access Control

string
default:"127.0.0.1"
IP address for CLI access interface
list
default:"[127.0.0.1]"
Whitelist of IP addresses allowed to access the CLI interfaceEnvironment variable: FTS_CLI_WHITELIST (colon or comma separated)YAML: Addresses.FTS_CLI_WHITELIST
Example:

SSL/TLS Timeouts

From FreeTAKServer/core/configuration/ReceiveConnectionsConstants.py:
These values control SSL/TLS connection behavior:
  • WRAP_SSL_TIMEOUT: Maximum time to complete SSL handshake
  • SSL_SOCK_TIMEOUT: Maximum idle time for established SSL connections

Security Configuration Examples

Development Environment

Development environments can use unencrypted connections for convenience, but production deployments should always use SSL/TLS.

Production Environment

Certificate Generation

Generate CA Certificate

Generate Server Certificate

Generate Client Certificate

User Management

Create API User

Create System User

Using API Authentication

Certificate Revocation Process

Add Certificate to CRL

Revocation Reasons

  • unspecified: No specific reason given
  • key_compromise: Private key has been compromised
  • ca_compromise: CA has been compromised
  • affiliation_changed: User’s affiliation has changed
  • superseded: Certificate has been replaced
  • cessation_of_operation: Certificate is no longer needed
  • privilege_withdrawn: User privileges have been revoked

File Permissions

Proper filesystem permissions are critical for security:

Security Best Practices

Never commit certificates, private keys, or passwords to version control systems.
Always change default passwords and secret keys before deploying to production.
Generate cryptographically secure random strings for SecretKey, password, and federationKeyPassword using openssl rand -base64 32 or similar tools.

Mandatory Production Security Measures

  1. Change all default passwords and keys
    • SecretKey
    • password (client certificate password)
    • federationKeyPassword
    • Default admin user credentials
  2. Use SSL/TLS encryption
    • Enable SSL CoT service (port 8089)
    • Enable HTTPS TAK API (port 8443)
    • Disable unencrypted services in production
  3. Implement certificate management
    • Generate unique certificates for production
    • Use strong key lengths (2048-bit minimum, 4096-bit recommended)
    • Set appropriate certificate expiration dates
    • Implement certificate rotation procedures
  4. Configure access controls
    • Restrict CLI access with AllowCLIIPs
    • Use firewall rules to limit service access
    • Implement network segmentation
  5. Secure filesystem
    • Set restrictive permissions on certificate files
    • Protect private keys (chmod 400)
    • Regular security audits of file permissions
  6. Monitor and log
    • Enable API call logging
    • Monitor certificate expiration dates
    • Review access logs regularly
    • Implement intrusion detection
  7. Certificate revocation
    • Maintain current CRL
    • Implement certificate revocation procedures
    • Test revocation process regularly
  8. Backup security
    • Encrypt backups containing certificates
    • Secure backup storage locations
    • Test backup restoration procedures
  9. Update and patch
    • Keep FreeTAKServer updated
    • Monitor security advisories
    • Apply security patches promptly
  10. Physical security
    • Secure server physical access
    • Protect certificate storage media
    • Implement secure key disposal procedures

Security Checklist

Before deploying to production:
  • Changed default SecretKey
  • Changed default client certificate password
  • Changed default admin credentials
  • Generated production CA certificate
  • Generated production server certificates
  • Configured SSL CoT service
  • Configured HTTPS TAK API
  • Disabled unencrypted services
  • Set appropriate file permissions
  • Configured AllowCLIIPs whitelist
  • Implemented firewall rules
  • Tested certificate revocation
  • Configured backup encryption
  • Documented certificate procedures
  • Tested disaster recovery procedures