Skip to main content

Overview

FreeTAKServer provides multiple network services for TAK clients and applications:
  • TCP CoT Service: Unencrypted Cursor on Target message service
  • SSL CoT Service: TLS-encrypted Cursor on Target message service
  • REST API Service: RESTful HTTP API for programmatic access
  • HTTP TAK API Service: HTTP endpoint for TAK protocol operations
  • HTTPS TAK API Service: Secure HTTPS endpoint for TAK protocol operations
Each service can be configured independently through MainConfig settings.

TCP CoT Service

The TCP CoT service handles unencrypted TAK Cursor on Target (CoT) messages over TCP.

Configuration

integer
default:"8087"
TCP port for unencrypted CoT connectionsEnvironment variable: FTS_COT_PORTYAML: Addresses.FTS_COT_PORT
integer
default:"1024"
Buffer size in bytes for receiving CoT data from clientsEnvironment variable: FTS_DATA_RECEPTION_BUFFERYAML: System.FTS_DATA_RECEPTION_BUFFER
integer
default:"4"
Maximum time in seconds to wait for data reception before timeoutEnvironment variable: FTS_MAX_RECEPTION_TIMEYAML: System.FTS_MAX_RECEPTION_TIME

Service Constants

Defined in FreeTAKServer/services/tcp_cot_service/configuration/tcp_cot_service_constants.py:

Message Types

  • SEND_TO_ALL (0): Broadcast message to all connected clients
  • SEND_TO_SOME (1): Send message to specific clients

Example Configuration

YAML:
Environment Variables:

Client Connection

TAK clients connect to the TCP CoT service using:
  • Protocol: TCP
  • Host: Server IP address
  • Port: CoTServicePort (default 8087)
  • Encryption: None
The TCP CoT service transmits data unencrypted. Use only in trusted networks or for testing. For production deployments, use the SSL CoT service instead.

SSL CoT Service

The SSL CoT service handles TLS-encrypted TAK Cursor on Target messages.

Configuration

integer
default:"8089"
TCP port for SSL/TLS encrypted CoT connectionsEnvironment variable: FTS_SSLCOT_PORTYAML: Addresses.FTS_SSLCOT_PORT
string
default:"/opt/fts/certs/server.key"
Path to server private key fileEnvironment variable: FTS_SERVER_KEYDIRYAML: Certs.FTS_SERVER_KEYDIR
string
default:"/opt/fts/certs/server.pem"
Path to server certificate file (PEM format)Environment variable: FTS_SERVER_PEMDIRYAML: Certs.FTS_SERVER_PEMDIR
string
default:"/opt/fts/certs/ca.pem"
Path to Certificate Authority (CA) certificateEnvironment variable: FTS_CADIRYAML: Certs.FTS_CADIR
string
default:"/opt/fts/certs/ca.key"
Path to Certificate Authority private keyEnvironment variable: FTS_CAKEYDIRYAML: Certs.FTS_CAKEYDIR
string
default:"supersecret"
Password for client certificate generationEnvironment variable: FTS_CLIENT_CERT_PASSWORDYAML: Certs.FTS_CLIENT_CERT_PASSWORD
string
default:"/opt/fts/certs/server.key.unencrypted"
Path to unencrypted server key (used internally)Environment variable: FTS_UNENCRYPTED_KEYDIRYAML: Certs.FTS_UNENCRYPTED_KEYDIR
string
default:"/opt/fts/certs/server.p12"
Path to PKCS#12 format certificate bundleEnvironment variable: FTS_SERVER_P12DIRYAML: Certs.FTS_SERVER_P12DIR

Service Constants

Defined in FreeTAKServer/services/ssl_cot_service/configuration/ssl_cot_service_constants.py:

SSL/TLS Settings

From FreeTAKServer/core/configuration/ReceiveConnectionsConstants.py:
  • WRAP_SSL_TIMEOUT: 1.0 seconds
  • SSL_SOCK_TIMEOUT: 60 seconds

Example Configuration

YAML:
Environment Variables:

Client Connection

TAK clients connect to the SSL CoT service using:
  • Protocol: TCP with TLS
  • Host: Server IP address
  • Port: SSLCoTServicePort (default 8089)
  • Encryption: TLS with client certificate authentication
  • Client Certificate: Required (generated by FTS or TAK Server)
Use the SSL CoT service for production deployments to ensure encrypted communications and client certificate authentication.

REST API Service

The REST API provides programmatic HTTP access to FreeTAKServer functionality.

Configuration

integer
default:"19023"
Port for the REST API serviceEnvironment variable: FTS_API_PORTYAML: Addresses.FTS_API_PORT
string
default:"0.0.0.0"
IP address for the REST API service to bind toEnvironment variable: FTS_API_ADDRESSYAML: Addresses.FTS_API_ADDRESS
boolean
default:"true"
Enable API optimizations for better performanceEnvironment variable: FTS_OPTIMIZE_APIYAML: System.FTS_OPTIMIZE_API

Authentication

The REST API uses Bearer token authentication with HTTPTokenAuth. From FreeTAKServer/services/rest_api_service/controllers/authentication.py:
Tokens are validated against:
  • APIUser table for API users
  • SystemUser table for system users
Successful authentication logs API calls to the database with:
  • User ID
  • Timestamp
  • Request content
  • Endpoint URL

API Endpoints

The REST API provides blueprints for:
  • Data Packages: Upload and manage data packages
  • Emergencies: Create and manage emergency notifications
  • ExCheck: Checklist management
  • GeoObjects: Create and manage geographic objects
  • Missions: Mission planning and coordination
  • User Management: User administration

Example Configuration

YAML:
Environment Variables:

API Usage

Default Values

From FreeTAKServer/core/configuration/RestAPIVariables.py:

HTTP TAK API Service

HTTP endpoint for TAK protocol operations (unencrypted).

Configuration

integer
default:"8080"
HTTP port for TAK API serviceEnvironment variable: FTS_HTTP_TAK_API_PORT

Endpoints

The HTTP TAK API service provides:
  • Enterprise Sync: Data synchronization for TAK clients
  • Missions: Mission management
  • ExCheck: Checklist operations
  • CITRAP: Critical Infrastructure TAK Reporting and Analysis Platform
  • Misc: Various utility endpoints

Example Configuration

Environment Variables:
The HTTP TAK API transmits data unencrypted. Use only in trusted networks. For production, use the HTTPS TAK API service.

HTTPS TAK API Service

Secure HTTPS endpoint for TAK protocol operations.

Configuration

integer
default:"8443"
HTTPS port for secure TAK API serviceEnvironment variable: FTS_HTTPS_TAK_API_PORT
Certificate configuration is shared with the SSL CoT service (see SSL CoT Service section).

Example Configuration

YAML:
Environment Variables:

Data Package Service

Configuration for the data package distribution service.

Configuration

string
default:"auto-detected"
IP address used for data package URLs. Must be set correctly for private data packages to work.Environment variable: FTS_DP_ADDRESSYAML: Addresses.FTS_DP_ADDRESS
string
default:"/opt/fts/FreeTAKServerDataPackageFolder"
Directory for storing uploaded data packagesEnvironment variable: FTS_DATAPACKAGE_PATHYAML: Filesystem.FTS_DATAPACKAGE_PATH

Constants

From FreeTAKServer/core/configuration/DataPackageServerConstants.py:

Example Configuration

YAML:
Set DataPackageServiceDefaultIP to your server’s public IP or domain name. TAK clients use this address to download data packages.

Federation Service

Configuration for federating with other TAK servers.

Configuration

integer
default:"9000"
Port for federation service connectionsEnvironment variable: FTS_FED_PORTYAML: Addresses.FTS_FED_PORT
string
default:"/opt/fts/certs/server.pem"
Certificate for federation connectionsEnvironment 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 keyEnvironment variable: FTS_FEDERATION_KEYPASSYAML: Certs.FTS_FEDERATION_KEYPASS

Example Configuration

YAML:

Service Management

Starting Services

Services are typically started together when launching FreeTAKServer:

Service Status

Default service status values from RestAPIVariables.py:

REST API Control

Services can be controlled via the REST API:

Complete Service Configuration Example

Best Practices

Always use encrypted services (SSL CoT, HTTPS TAK API) for production deployments to protect sensitive tactical data.
Configure DataPackageServiceDefaultIP and UserConnectionIP to match the IP address or domain name that clients use to connect.
  • Use SSL/TLS services for production environments
  • Keep certificate files secure with appropriate filesystem permissions
  • Regularly rotate certificates and passwords
  • Monitor service logs for connection issues
  • Use different ports for each service to avoid conflicts
  • Configure firewalls to allow only necessary service ports
  • Set appropriate buffer sizes based on your network conditions
  • Use the REST API for automated monitoring and management