TAK Server Configuration Guide 5.2
TAK Server Configuration Guide 5.2
Version 5.2
July 2024
2 Change Log 4
3 System Requirements 4
3.1 Supported Operating Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2 Server Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.3 AWS / GovCloud Recommended Instance Type . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4 Installation 5
4.1 Overview and Installer Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.1 Installer for single-server install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.2 Database installer for two-server install . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.3 Core installer for two-server install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.4 Containerized docker install bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.5 Containerized hardeneded docker install bundle . . . . . . . . . . . . . . . . . . . . . . 5
4.1.6 Installer for federation hub (beta) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.1.7 Verifying GPG signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.2 New Installation: One Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2.1 Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2.2 TAK Server Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.2.3 Configure TAK Server Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.3 New Installation: Two Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.3.2 Server One: Database Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4.3.3 Server Two: Core Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.4 Use Setup Wizard to Configure TAK Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1
9 Configuration 34
9.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.2 Configuring Security Through Web UI (Certificates/TLS) . . . . . . . . . . . . . . . . . . . . 34
9.3 Group Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
9.4 Group Assignment by Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
9.4.1 Input Configuration UI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
9.5 Group Assignment Using Authentication Messages . . . . . . . . . . . . . . . . . . . . . . . . 35
9.6 Group Assignment using Client Certificates . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.7 Authentication Backends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.7.1 File-Based . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.7.2 Active Directory (AD) / LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
9.7.3 Configuring LDAP Through Web Interface . . . . . . . . . . . . . . . . . . . . . . . . 37
9.8 Configuring Messaging and Repository Settings through Web UI . . . . . . . . . . . . . . . . 37
9.9 Optionally Disabling UI and WebTAK on HTTPS Ports . . . . . . . . . . . . . . . . . . . . . 38
9.10 VBM Admin Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
10 WebTAK 40
11 Device Profiles 41
12 Federation 41
12.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
12.2 Enable Federation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
12.3 Upload Federate Certificate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
12.4 Make the Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
12.5 Federated Group Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
12.6 Mission Federation Disruption Tolerance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
12.7 Data Package and Mission File Blocker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
12.8 Federation Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
12.8.1 Alternate Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
13 Metrics 49
14 Logging 49
16 OAuth2 Authentication 50
17 User Management UI 50
17.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
17.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2
22.3 Configure TAK Server to use SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3
1 About TAK Server
TAK Server is a situational awareness server, that provides a dynamic Common Operating Picture to users
of the Team Awareness Kit, including ATAK (Android), WinTAK (Windows) and WebTAK. TAK enables
sharing of geolocated information in real time for military forces, law enforcement, and emergency responders.
It supports both wireless and wired networks, as well as cloud and data center deployment.
2 Change Log
See https://wiki.tak.gov/display/DEV/TAK+Server+Change+Log
3 System Requirements
3.1 Supported Operating Systems
• Rocky Linux 8 (Replacement for CentOS 8, which is EOL)
• Red Hat Enterprise Linux (RHEL) 8 or 7
• Ubuntu 22
• Raspberry Pi OS (64-bit)
• CentOS 7 (not CentOS 8 Stream)
Java 17 is required. Java 17 is installed by default via package dependencies, but if your system has a different
Java version installed in addition to Java 17, ensure that TAK Server is using Java 17.
4
4 Installation
4.1 Overview and Installer Files
TAK Server supports multiple deployment configurations: - Single server install: One server running TAK
Server core (messaging, API, plugins and database): recommended for fewer than 500 users. - Two server
install: One server running TAK Server core (messaging, API, plugins and database) and a second server
running PostgreSQL database: recommended for more than 500 users. - Containerized docker install: One
container running TAK Server core (messaging, API, plugins and database) and another container running Post-
greSQL database (designed for operating systems other than CentOS 7 / RHEL 7). Hardened containers are
published to both tak.gov and IronBank (see https://ironbank.dso.mil/repomap?searchText=tak%20server).
The following installation files are provided:
5
Example of a successful output:
takserver-5.2-RELEASE28.noarch.rpm: rsa sha1 (md5) pgp md5 OK
If the RPM packages were not signed with a GPG key, the output might look like:
takserver-5.2-RELEASE25.noarch.rpm: sha1 md5 OK
Using the ID within the deb_policy.pol file, ex. 039FCDA2D8907527, run the following command to verify
signed TAK Server deb resources:
sudo mkdir /usr/share/debsig/keyrings/039FCDA2D8907527
sudo mkdir /etc/debsig/policies/039FCDA2D8907527
sudo touch /usr/share/debsig/keyrings/039FCDA2D8907527/debsig.gpg
sudo gpg --no-default-keyring --keyring
/usr/share/debsig/keyrings/039FCDA2D8907527/debsig.gpg --import
takserver-public-gpg.key
sudo cp deb_policy.pol /etc/debsig/policies/039FCDA2D8907527/debsig.pol
debsig-verify -v takserver-5.2-RELEASE_all.deb
6
Note that when installing postgres, you may run into issues related to the GPG key – if you need to update
the key, you can modify the postgres installation command based on your operating system according to the
guidelines here: https://yum.postgresql.org/news/pgdg-rpm-repo-gpg-key-update/
sudo dnf install epel-release -y
sudo dnf install -y
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rp
sudo dnf -qy module disable postgresql && sudo dnf update -y
sudo dnf install java-17-openjdk-devel -y
sudo dnf config-manager --set-enabled powertools
sudo dnf install takserver-5.2-RELEASEx.noarch.rpm -y
sudo dnf install checkpolicy
cd /opt/tak && sudo ./apply-selinux.sh && sudo semodule -l | grep takserver
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
4.2.2.2 RHEL 8
RHEL8 FIPS mode Support. TAK Server has experimental support for RHEL8 FIPS mode. This is intended
for evaluation only, for hardened environments. These steps enable TAK Server to operate with RHEL FIPS
mode enabled, but does not provide full FIPS 140 compliance. See below for a new option for certs script
when using FIPS mode. Client certificates generated with FIPS mode may not work with ATAK.
sudo rpm --import http://download.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8
sudo rpm --import https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG
sudo vi /etc/fapolicyd/rules.d/99-whitelist.rules
Add line:
deny perm=any all : all
sudo vi /etc/fapolicyd/rules.d/39-tak.rules
Add lines:
allow perm=open all : dir=/opt/tak/ ftype=application/x-sharedlib trust=0
allow perm=open exe=/usr/pgsql-15/bin/postgres : all
• Custom certificates with stronger algorithms will need to be generated for use on systems with FIPS
enabled. To do this: follow the existing certificate instructions, but append –fips to the end of each
./makeRootCa.sh and ./makeCert.sh command. Note: ATAK may not support certificates generated
with these stronger algorithms*
— End FIPS Mode Commands —
Install EPEL (EPEL provides certain dependencies required by PostgreSQL.) Install postgres yum repository.
Install java 17. Disable the postgresql module (so the later postgresql and postgis specific versions aren’t
inaccessible due to ‘modular filtering’). Enable Repository Management and repository CodeReady Builder.
Install TAK server. Apply SELinux takserver-policy.
Note that when installing postgres, you may run into issues related to the GPG key – if you need to update
the key, you can modify the postgres installation command based on your operating system according to the
guidelines here: https://yum.postgresql.org/news/pgdg-rpm-repo-gpg-key-update/
7
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
-y
sudo dnf install -y
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rp
sudo dnf update -y && sudo dnf install java-17-openjdk-devel -y
sudo dnf module disable postgresql
sudo subscription-manager config --rhsm.manage_repos=1
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
Note: If you get the error ‘This system has no repositories available through subscriptions’, you need to
subscribe your system with:
sudo subscription-manager register --username <your_username> --password <your_password>
--auto-attach
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
4.2.2.3 RHEL 7
Install EPEL (EPEL provides certain dependencies required by PostgreSQL.) Install postgres yum repository
(required in order to install up-to-date Postgresql and PostGIS packages.) Install OpenJDK 17 and other
dependencies. Install TAK server
Note that when installing postgres, you may run into issues related to the GPG key – if you need to update
the key, you can modify the postgres installation command based on your operating system according to the
guidelines here: https://yum.postgresql.org/news/pgdg-rpm-repo-gpg-key-update/
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
sudo rpm -ivh takserver-5.2-RELEASEx.noarch.rpm --nodeps
Note that the yum package manager does not currently support JDK 17 on RHEL 7. By installing the
package manually, you will be responsible for future security updates. For a safer long-term solution, we
recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Check Java version:
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
8
sudo alternatives --config java
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
4.2.2.5 CentOS 7
Install EPEL (EPEL provides certain dependencies required by PostgreSQL.) Install postgres yum repository
(required in order to install up-to-date Postgresql and PostGIS packages.) Install OpenJDK 17 and other
dependencies. Install Tak server.
Note that when installing postgres, you may run into issues related to the GPG key – if you need to update
the key, you can modify the postgres installation command based on your operating system according to the
guidelines here: https://yum.postgresql.org/news/pgdg-rpm-repo-gpg-key-update/
sudo yum install epel-release -y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
sudo rpm -ivh takserver-5.2-RELEASEx.noarch.rpm --nodeps
Note that the yum package manager does not currently support JDK 17 on CentOS 7. By installing the
package manually, you will be responsible for future security updates. For a safer long-term solution, we
recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Check Java version:
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
9
4.2.2.6 yum Install From tak.gov
Check to see if a .repo file exists for tak.gov
ls /etc/yum.repos.d/Takserver.repo
If it exists, skip down to the yum install of takserver database. If it doesn’t exist, create a new .repo file to
point yum to the yum repo on tak.gov.
cd /etc/yum.repos.d
sudo vi Takserver.repo
You can also edit using another editor besides vi. Update the file Takserver.repo to contain:
[takrepo]
name=TakserverRepository
baseurl=https://<ARTIFACTORY_USER>:<ARTIFACTORY_TOKEN>@artifacts.tak.gov/artifactory/takserver-yum
enabled=1
gpgcheck=0
Where <ARTIFACTORY_USER> is a valid login to Artifactory that has access to the takserver-yum
repo and <ARTIFACTORY_TOKEN> is a special token unique to the given Artifactory user that can be
retrieved by that user using the “Set Me Up” menu option to retrieve it.
Note: Do NOT use your password as it the Token is more secure and cannot be used for logging in. Only for
retrieving or publishing. Also note: When you change the password of the given user, you will also need to
retrieve the new token which is based on it and update the baseurl in the Takserver.repo file.
Save the Takserver.repo file and then do the install of the takserver.
sudo yum install takserver-core-5.2-RELEASEx
On resource limited hosts, such as a Raspberry Pi, you may start/stop only essential api and messaging TAK
Server services with:
sudo systemctl [start|stop] takserver-noplugins
For secure operation, TAK Server requires a keystore and truststore (X.509 certificates).
Next, follow the instructions in Appendix B to create these certificates. TAK Server by default is TLS only,
so certificate generation, including an administrative certificate is required for configuration. In addition, if
you would like to configure TLS for Postgres database connection, follow additional steps in Appendix D.
Verify that the steps in Appendix B have been followed by checking the following items:
Certificates are present at:
10
/opt/tak/certs/files
The TAK Server was restarted, the admin cert has been generated, and an admin account in TAK Server
was created with the command:
sudo java -jar /opt/tak/utils/UserManager.jar certmod -A /opt/tak/certs/files/admin.pem
While following the instructions in Appendix B, you will have created an admin certificate. Import this
certificate into your browser, so that you can access the Admin. It will be located here on your TAK Server
machine:
/opt/tak/certs/files/admin.pem
11
4.3.2 Server One: Database Server
4.3.2.1 Dependency Setup
First, update firewall rules to allow communication with server two, for TCP port 5432.
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
4.3.2.1.2 RHEL 8
Setup the extra postgres yum repo for the latest postgres and postgis. Disable the postgresql stream to
install the specific postgres version we depend on. Install TAK Server RPM database and its dependencies.
Note that when installing postgres, you may run into issues related to the GPG key – if you
need to update the key, you can modify the postgres installation command based on your
operating system according to the guidelines here: https://yum.postgresql.org/news/pgdg-
rpm-repo-gpg-key-update/
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
-y
12
sudo dnf install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
Note: If you get the error ‘This system has no repositories available through subscriptions’,
you need to subscribe your system with “sudo subscription-manager register –username
<your_username> –password <your_password> –auto-attach”
Make sure the database RPM is in the current directory
sudo dnf install takserver-database-5.2-RELEASE-x.noarch.rpm
--setopt=clean_requirements_on_remove=false -y
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
4.3.2.1.3 RHEL 7
Setup the extra postgres yum repo for the latest postgres and postgis. Install OpenJDK 17 and other
dependencies. Install TAK Server RPM database.
Note that when installing postgres, you may run into issues related to the GPG key – if you
need to update the key, you can modify the postgres installation command based on your
operating system according to the guidelines here: https://yum.postgresql.org/news/pgdg-
rpm-repo-gpg-key-update/
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
Note that the yum package manager does not currently support JDK 17 on RHEL 7. By
installing the package manually, you will be responsible for future security updates. For a safer
long-term solution, we recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Make sure the database RPM is in the current directory
sudo rpm -ivh takserver-database-5.2-RELEASEx.noarch.rpm --nodeps
13
java -version
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
Open the file /opt/tak/CoreConfig.example.xml and look for the auto-generated password for the database.
This password will be used to configure the Core Server.
<connection url="jdbc:postgresql://127.0.0.1:5432/cot" username="martiuser"
password="Database_password" />
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
4.3.2.1.5 CentOS 7
Setup the extra postgres yum repo for the latest postgres and postgis. Install OpenJDK 17 and other
dependencies. Install TAK Server RPM database.
Note that when installing postgres, you may run into issues related to the GPG key – if you
need to update the key, you can modify the postgres installation command based on your
operating system according to the guidelines here: https://yum.postgresql.org/news/pgdg-
rpm-repo-gpg-key-update/
sudo yum install epel-release -y
14
sudo yum update -y
Note that the yum package manager does not currently support JDK 17 on Centos 7. By installing the
package manually, you will be responsible for future security updates. For a safer long-term solution, we
recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Make sure the database RPM is in the current directory
sudo yum install takserver-database-5.2-RELEASE-x.noarch.rpm
--setopt=clean_requirements_on_remove=false -y
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
15
4.3.3.2.2 RHEL 8
sudo dnf update -y && sudo dnf install java-17-openjdk-devel -y
sudo dnf install takserver-core-5.2-RELEASEx.noarch.rpm -y
sudo dnf install checkpolicy
cd /opt/tak && sudo ./apply-selinux.sh && sudo semodule -l | grep takserver
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
4.3.3.2.3 RHEL 7
Install EPEL (EPEL provides certain dependencies required by PostgreSQL.) Install postgres yum repository
(required in order to install up-to-date Postgresql and PostGIS packages.) Install OpenJDK 17 and other
dependencies. Install Tak server.
Note that when installing postgres, you may run into issues related to the GPG key – if you
need to update the key, you can modify the postgres installation command based on your
operating system according to the guidelines here: https://yum.postgresql.org/news/pgdg-
rpm-repo-gpg-key-update/
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linuxx64_bin.rpm
sudo rpm -ivh takserver-core-5.2-RELEASEx.noarch.rpm --nodeps
Note that the yum package manager does not currently support JDK 17 on RHEL 7. By installing the
package manually, you will be responsible for future security updates. For a safer long-term solution, we
recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Check Java version
java -version
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
16
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
4.3.3.2.5 CentOS 7
Install EPEL (EPEL provides certain dependencies required by PostgreSQL.) Install postgres yum repository
(required in order to install up-to-date Postgresql and PostGIS packages.) Install OpenJDK 17 and other
dependencies. Install Tak server.
Note that when installing postgres, you may run into issues related to the GPG key – if you
need to update the key, you can modify the postgres installation command based on your
operating system according to the guidelines here: https://yum.postgresql.org/news/pgdg-
rpm-repo-gpg-key-update/
sudo yum install epel-release -y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linuxx64_bin.rpm
sudo rpm -ivh takserver-core-5.2-RELEASEx.noarch.rpm --nodeps
Note that the yum package manager does not currently support JDK 17 on Centos 7. By installing the
package manually, you will be responsible for future security updates. For a safer long-term solution, we
recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Check Java version
java -version
This should tell you you have 17.x.y. If the “java -version” command tells you your Java version is not 17.x.y,
then you can use the alternatives command to change it:
sudo alternatives --config java
If it exists, skip down to the yum install of takserver database. If it doesn’t exist, create a new .repo file to
point yum to the yum repo on tak.gov.
cd /etc/yum.repos.d
sudo vi Takserver.repo
You can also edit using another editor besides vi. Update the file Takserver.repo to contain:
[takrepo]
name=TakserverRepository
baseurl=https://<ARTIFACTORY_USER>:<ARTIFACTORY_TOKEN>@artifacts.tak.gov/artifactory/takserver-yum
enabled=1
gpgcheck=0
17
Where <ARTIFACTORY_USER> is a valid login to Artifactory that has access to the takserver-yum
repo and <ARTIFACTORY_TOKEN> is a special token unique to the given Artifactory user that can be
retrieved by that user using the “Set Me Up” menu option to retrieve it.
Note: Do NOT use your password as it the Token is more secure and cannot be used for logging in. Only for
retrieving or publishing.
Also note: When you change the password of the given user, you will also need to retrieve the new token
which is based on it and update the baseurl in the Takserver.repo file.
Save the Takserver.repo file and then do the install of the takserver.
sudo yum install takserver-core-5.2-RELEASEx
4.3.3.3 Configuration
Configure database connection by updating /opt/tak/CoreConfig.xml:
<repository enable="true" numDbConnections="200" primaryKeyBatchSize="500"
insertionBatchSize="500">
<connection url="jdbc:postgresql://<Database_server_IP_address>:5432/cot"
username="martiuser"
password="Database_password"/>
</repository>
For secure operation, TAK Server requires a keystore and truststore (X.509 certificates).
Next, follow the instructions in Appendix B to create these certificates. TAK Server by default is TLS only,
so certificate generation, including an administrative certificate is required for configuration.
Verify that the steps in Appendix B have been followed by checking the following items:
Certificates are present at:
/opt/tak/certs/files
The admin cert has been generated and an admin account in TAK Server was created with the command:
sudo java -jar /opt/tak/utils/UserManager.jar certmod -A /opt/tak/certs/files/admin.pem
18
Enter the certificate password. The default password is atakatak
Browse to:
https://localhost:8443
Once logged in with the admin certificate, configure the TAK Server with the following instructions:
Configure TAK Server to connect to the database. Access the Database configuration settings:
Edit the database connection address, specifying the hostname or IP address of the database
server:
19
Restart TAK Server
sudo systemctl restart takserver
If you would like to configure TLS for Postgres database connection, refer to Appendix D.
20
NOTE: Insecure ports are a potential security risk and may allow attackers to gain access to the system
resulting in the disclosure of personal and sensitive information. Use of unencrypted ports should be avoided
to ensure a secure TAK Server deployment.
Followed by the recommended federation configuration, if you wish to set up your TAK Server to support
federation. (For more information on federation, go to section 8):
21
5 Upgrade Existing TAK Server Installation
5.1 Overview
Follow this procedure to upgrade a system running TAK Server.
22
sudo dnf install takserver-5.1-RELEASEx.noarch.rpm
--setopt=clean_requirements_on_remove=false -y
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
5.2.2 RHEL 8
Setup the extra postgres yum repo for the latest postgres and postgis. Install Java 17. Disable the postgresql
stream to install the specific postgres version we depend on. Install TAK Server RPM database and its
dependencies.
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
-y
sudo dnf install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo dnf update -y && sudo dnf install java-17-openjdk-devel -y
sudo dnf module disable postgresql
sudo subscription-manager config --rhsm.manage_repos=1
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
Note: If you get the error ‘This system has no repositories available through subscriptions’, you need to
subscribe your system with:
sudo subscription-manager register --username <your_username> --password <your_password>
--auto-attach
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
5.2.3 RHEL 7
If you have not previously done so, install EPEL (EPEL provides certain dependencies required by PostgreSQL.)
Install postgres yum repository (required in order to install up-to-date Postgresql and PostGIS packages.)
Install OpenJDK 17 and other dependencies. Upgrade TAK server
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
-y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
23
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
sudo rpm -Uvh takserver-5.1-RELEASEx.noarch.rpm --nodeps
Note that the yum package manager does not currently support JDK 17 on Centos 7 and RHEL 7. By
installing the package manually, you will be responsible for future security updates. For a safer long-term
solution, we recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Check Java version:
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
5.2.5 Centos 7
If you have not previously done so, install EPEL (EPEL provides certain dependencies required by PostgreSQL.)
Install postgres yum repository (required in order to install up-to-date Postgresql and PostGIS packages.)
Install OpenJDK 17 and other dependencies. Upgrade Tak server.
sudo yum install epel-release -y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
sudo rpm -Uvh takserver-5.1-RELEASEx.noarch.rpm --nodeps
Note that the yum package manager does not currently support JDK 17 on Centos 7 and RHEL 7. By
installing the package manually, you will be responsible for future security updates. For a safer long-term
solution, we recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Check Java version:
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
24
5.3 Two-Server Upgrade
5.3.1 Rocky Linux 8
Upgrade the two TAK Server packages on the servers on which they are installed.
First, on the core server, install Java 17 and upgrade the core package:
sudo dnf install java-17-openjdk-devel -y
sudo dnf install takserver-core-5.1-RELEASEx.noarch.rpm -y
Next, on the database server, upgrade the database. Setup the extra postgres yum repo for the latest postgres
and postgis. Disable the postgresql stream to install the specific postgres version we depend on. Install
Java 17. Enable the ‘powertools’ repo for postgis dependencies. Install TAK Server RPM database and its
dependencies.
sudo dnf install epel-release -y
sudo dnf install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo dnf update -y
sudo dnf module disable postgresql
sudo dnf install java-17-openjdk-devel -y
sudo dnf config-manager --set-enabled powertools
This command will make a copy of your existing Postgresql database and update it to version 15. If there is
an issue with the upgraded database, you can fall back to the copy of the previous version. If the upgrade
succeeds, there will be a delete_old_cluster.sh script automatically created that you can run to safely remove
the previous version’s data copy.
Check Java version in both servers
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
5.3.2 RHEL 8
Upgrade the two TAK Server packages on the servers on which they are installed.
First, on the core server, install Java 17 and upgrade the core package:
sudo dnf update -y && sudo dnf install java-17-openjdk-devel -y
sudo dnf install takserver-core-5.1-RELEASEx.noarch.rpm -y
Next, on the database server, upgrade the database. Setup the extra postgres yum repo for the latest postgres
and postgis. Install Java 17. Disable the postgresql stream to install the specific postgres version we depend
on. Install TAK Server RPM database and its dependencies.
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
-y
25
sudo dnf install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo dnf update -y && sudo dnf install java-17-openjdk-devel -y
sudo dnf module disable postgresql
sudo subscription-manager config --rhsm.manage_repos=1
sudo subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
Note: If you get the error ‘This system has no repositories available through subscriptions’, you need to
subscribe your system with:
sudo subscription-manager register --username <your_username> --password <your_password>
--auto-attach
This command will make a copy of your existing Postgresql database and update it to version 15. If there is
an issue with the upgraded database, you can fall back to the copy of the previous version. If the upgrade
succeeds, there will be a delete_old_cluster.sh script automatically created that you can run to safely remove
the previous version’s data copy.
Check Java version in both servers
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
5.3.3 RHEL 7
Install OpenJDK 17 and other dependencies (if you have not previously done so.)
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
Note that the yum package manager does not currently support JDK 17 on RHEL 7. By installing the
package manually, you will be responsible for future security updates. For a safer long-term solution, we
recommend that you update your OS to RHEL 8 or Rocky Linux 8. Upgrade the two TAK Server packages
on the servers on which they are installed.
First, upgrade the core package:
sudo rpm -Uvh takserver-core-5.1-RELEASEx.noarch.rpm --nodeps
Next, upgrade the database. Setup the extra postgres yum repo for the latest postgres and postgis. Install
TAK Server RPM database and its dependencies.
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo yum update -y
26
Make sure the database RPM is in the current directory
sudo rpm -Uvh takserver-database-5.1-RELEASEx.noarch.rpm --nodeps
This command will make a copy of your existing Postgresql database and update it to version 15. If there is
an issue with the upgraded database, you can fall back to the copy of the previous version. If the upgrade
succeeds, there will be a delete_old_cluster.sh script automatically created that you can run to safely remove
the previous version’s data copy.
Check Java version in both servers
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
This command will make a copy of your existing Postgresql database and update it to version 15. If there is
an issue with the upgraded database, you can fall back to the copy of the previous version. If the upgrade
succeeds, there will be a delete_old_cluster.sh script automatically created that you can run to safely remove
the previous version’s data copy.
Check Java version in both servers
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
5.3.5 Centos 7
Install OpenJDK 17 and other dependencies (if you have not previously done so.)
sudo yum install -y postgis33_15 postgis33_15-utils
sudo yum install -y postgresql15-server postgresql15-contrib
sudo yum install -y https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
Note that the yum package manager does not currently support JDK 17 on Centos 7. By installing the
package manually, you will be responsible for future security updates. For a safer long-term solution, we
recommend that you update your OS to RHEL 8 or Rocky Linux 8.
Upgrade the two TAK Server packages on the servers on which they are installed.
First, upgrade the core package:
sudo rpm -Uvh takserver-core-5.1-RELEASEx.noarch.rpm --nodeps
27
Next, upgrade the database. Setup the extra postgres yum repo for the latest postgres and postgis. Install
TAK Server RPM database and its dependencies.
sudo yum install epel-release -y
sudo yum install
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rp
-y
sudo yum update -y
This command will make a copy of your existing Postgresql database and update it to version 15. If there is
an issue with the upgraded database, you can fall back to the copy of the previous version. If the upgrade
succeeds, there will be a delete_old_cluster.sh script automatically created that you can run to safely remove
the previous version’s data copy.
Check Java version in both servers
java -version
This should tell you have 17.x.y. If the command tells you your Java version is not 17.x.y, then you can use
the alternatives command to change it:
sudo alternatives --config java
28
recommended that you copy the ‘takserver-docker-<version>.zip’ file into your WSL user’s home directory
and execute all docker commands from there (vs accessing your Windows filesystem from /mnt). From there,
unzip the file and run the docker commands below for TAK Server. It’s important to unzip the file from
within WSL to ensure permissions are setup correctly.
TAK Server CoreConfig Setup: 1. Open tak/CoreConfig.example.xml and set a database password 2.
Make any other configuration changes you need
TAK Server Database Container Setup: 1. Build TAK server database image:
docker build -t takserver-db:"$(cat tak/version.txt)" -f docker/Dockerfile.takserver-db .
3. The TAK Server database container can be configured to persist data directly to the host or only within
the container.
a. To persist to the host, create an empty host directory (unless you have a directory from a previous
docker install you want to reuse). For upgrading purposes, we recommend that you keep the takserver
database directory outside of the ‘takserver-docker-<version>’ directory structure.
docker run -d -v <absolute path to takserver database
directory>:/var/lib/postgresql/data:z -v $(pwd)/tak:/opt/tak:z -it -p 5432:5432
--network takserver-"$(cat tak/version.txt)" --network-alias tak-database --name
takserver-db-"$(cat tak/version.txt)" takserver-db:"$(cat tak/version.txt)"
2. Running TAK Server container: use -p <host port>:<container port> to map any additional ports you
have configured. Adding new inputs or changing ports while the container is running will
require the container to be recreated so that the new port mapping can be added.
docker run -d -v $(pwd)/tak:/opt/tak:z -it -p 8089:8089 -p 8443:8443 -p 8444:8444 -p
8446:8446 -p 9000:9000 -p 9001:9001 --network takserver-"$(cat tak/version.txt)"
--name takserver-"$(cat tak/version.txt)" takserver:"$(cat tak/version.txt)"
3. Before using the TAK Server, you must setup the certificates for secure operation. If you
have already configured certificates you can skip this step. You can also copy existing certificates into
‘tak/certs/files’ and a UserAuthetication.xml file into ‘tak/’ to reuse existing certificate authentication
settings. Any change to certificates while the container is running will require either a
TAK server restart or container restart. Additional certificate details can be found in Appendix
B.
a. Edit tak/certs/cert-metadata.sh
b. Generate root ca
docker exec -it takserver-"$(cat tak/version.txt)" bash -c "cd /opt/tak/certs &&
./makeRootCa.sh"
29
c. Generate server cert
docker exec -it takserver-"$(cat tak/version.txt)" bash -c "cd /opt/tak/certs &&
./makeCert.sh server takserver"
f. Tail takserver logs from the host. Once TAK server has successfully started, proceed to
the next step.
tail -f tak/logs/takserver-messaging.log
tail -f tak/logs/takserver-api.log
4. Accessing takserver Create admin client certificate for access on secure port 8443 (https):
docker exec takserver-"$(cat tak/version.txt)" bash -c "cd /opt/tak/ && java -jar
utils/UserManager.jar certmod -A certs/files/<client cert>.pem"
2. Run the Certificate Authority Setup Container: If certificates have previously been generated and exist
in the tak/cert/files path when building the ca-setup-hardened image then certificate generation will be
skipped at runtime.
docker run --name ca-setup-hardened -it -d ca-setup-hardened
30
TAK Server Database Hardened Container Setup:
1. Building the hardened docker images requires creating an Iron Bank/Repo1 account to access the
approved base images. To create an account, follow the instructions in the IronBank Getting Started
page. To download the base images via the CLI, see the instructions in the Registry Access section.
After obtaining the necessary credentials, run:
docker login registry1.dso.mil
2. Follow the instructions in the TAK Server CoreConfig Setup section and update the <connection-url>
tag with the hardened TAK Database container name. For example:
connection url="jdbc:postgresql://tak-database-hardened-<version>:5432/cot"
username="martiuser" password=<password>/>
Ensure in the db-utils/pg_hba.conf file that there is an entry for the subnet of the hardened takserver network.
To determine the subnet of the network:
docker network inspect takserver-net-hardened-"$(cat tak/version.txt)"
Configuring Certificates
1. Get the admin certificate fingerprint
docker exec -it ca-setup-hardened bash -c "openssl x509 -noout -fingerprint -md5 -inform
pem -in files/admin.pem | grep -oP ’MD5 Fingerprint=\K.*’"
2. Add the certificate fingerprint as the admin after the hardened TAK server container has started (about
60 seconds)
31
docker exec -it takserver-hardened-"$(cat tak/version.txt)" bash -c ’java -jar
/opt/tak/utils/UserManager.jar usermod -A -f <admin cert fingerprint> admin’
Useful Commands
To run these commands on the hardened containers, add the -hardened suffix to the container names.
- View images:
‘‘‘bash
docker images takserver
docker images takserver-db
‘‘‘
- View containers
All: ’docker ps -a’
Running: ’docker ps’
Stopped: ’docker ps -a | grep Exit’
- Exec into container
‘‘‘bash
docker exec -it takserver-"$(cat tak/version.txt)" bash
docker exec -it takserver-db-"$(cat tak/version.txt)" bash
‘‘‘
- Exec command in container
‘‘‘bash
docker exec -it takserver-"$(cat tak/version.txt)" bash -c "<command>"
docker exec -it takserver-db-"$(cat tak/version.txt)" bash -c "<command>"
‘‘‘
- Tail takserver logs
‘‘‘bash
tail -f tak/logs/takserver-messaging.log
tail -f tak/logs/takserver-api.log
‘‘‘
- Restart TAK server
‘‘‘bash
docker exec -d takserver-"$(cat tak/version.txt)" bash -c "cd /opt/tak/ &&
./configureInDocker.sh"
‘‘‘
- Start/Stop container:
‘‘‘bash
docker <start/stop> takserver-"$(cat tak/version.txt)"
docker <start/stop> takserver-db-"$(cat tak/version.txt)"
‘‘‘
- Remove container:
‘‘‘bash
docker rm -f takserver-"$(cat tak/version.txt)"
docker rm -f takserver-db-"$(cat tak/version.txt)"
‘‘‘
32
documentation at https://fedoraproject.org/wiki/FirewallD.
The following tips will get you started for lab/field environments.
If you are working from a fresh OS install, the only active zone is ‘public’.
For each each zone, you’ll want to enable TCP (and possibly UDP) ports for the inputs in your CoreConfig.xml
file, plus the web server’s port. For example,
sudo firewall-cmd --zone=public --add-port 8089/tcp -permanent
sudo firewall-cmd --zone=public --add-port 8443/tcp --permanent
The ports you’ll need to open for the default configuration are 8089 and 8443.
Finally, enable your new firewall rules:
sudo firewall-cmd -reload
IMPORTANT: Raspberry Pi installs, please reboot your device after installing ufw.
To check the status of the firewall service with current port rules:
sudo ufw status
Perform the following commands to set initial rules for your firewall:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
33
8 Software Installation Location
The RPM installer places the TAK server software and configuration in the directory /opt/tak. It creates
a user named tak who is the owner of the files in that directory tree. Always use this tak user when
editing CoreConfig.xml or generating certificates. You can become the tak user by entering:
sudo su tak
9 Configuration
9.1 Overview
Configuration is primarily done through the web interface. Changes made in the interface will be reflected in
the /opt/tak/CoreConfig.xml file. If that file does not exist (e.g. on a fresh install), then when TAK Server
starts up it will copy /opt/tak/CoreConfig.example.xml. The example has many commented out options.
Notable configuration options:
• inputs: In the <network> section there are a series of <input> elements. These define ports the server
will listen on. Protocol options are as follows:
– udp: standard CoT udp protocol; unencrypted
– mcast: like udp, but has additional configuration option for multicast group
– tcp: publish-only port; standard CoT tcp protocol; unencrypted
– stcp: streaming/bi-directional; this is for ATAK to connect to. Unencrypted, for testing only
– tls: TCP+TLS streaming/bi-directional for encrypted communication with TAK clients
• <auth> : you can use either a flat file or an LDAP backend for group filtering support
• <security>: here you specify the keystore files to use for the secure port(s)
34
• Assigning <filtergroup> elements to <inputs>: this is simple, but provides no access control if you
have multiple ports configured on the same server.
• Active Directory / LDAP / Flat file with additional authentication message
• Active Directory / LDAP / Flat file without additional authentication messages (uses certificate-based
identification)
Details on the three options:
would have the effect of making every CoT event that came into the ‘stdudp’ input be associated with the
“TEST1” group instead of the anonymous group. If there is no filtergroup specified, the default is the old
behavior, which is a special anonymous group. The anonymous group has a name “__ANON__” that
can be used to explicitly add it back in if needed. The filtergroup option can be used with the streaming
input protocols as well (stcp, tls), the effect of which is that any subscriptions made by connecting to that
port inherit the filter group from the input. <filtergroup> cannot be used in conjunction with the “auth”
attribute on the same input. You can however use them on separate inputs, for example:
<input _name="stdudp" protocol="udp" port="8087">
<filtergroup>CN=TAK1,DC=...</filtergroup>
</input>
<input _name="sec" protocol="tls" port="8089" auth="ldap" />
Note that when trying to interact with LDAP groups, you need to use the fully qualified group name that
LDAP/ActiveDirectory reports.
35
For example, this input definition specifies streaming TCP, encrypted with TLS, authenticating the user with
a client certificate and also requiring an authentication message, and using the LDAP authentication backend:
<input _name="ldapssl" protocol="tls" port="8091" auth="ldap"/>
The CN value jkirk will be used as the username. The process for deciding which authentication backend to
use depends on whether or not an Active Directory (AD) LDAP configuration is present in CoreConfig.xml.
Valid service account credentials must be configured in CoreConfig.. If AD authentication is configured, the
user account is matched by the sAMAccountName LDAP attribute. At client authentication time, if groups
are found in AD for the user, those groups are used by TAK Server. If no groups are found, the flat-file
authentication backend is searched for a match on the username. If no groups are found for the user in either
repository, the user is assigned to the __ANON__ group.
When configuring the input, a TLS input with an auth type of x509 directs TAK Server to use the client
certificate for both authentication and group assignment. On the input configuration, the on or example, this
input definition specifies streaming TCP encrypted with TLS, authenticating the user with a client certificate
and also requiring an authentication message, and using the LDAP authentication backend:
<input _name="ldapssl" protocol="tls" port="8091" auth="x509"/>
36
<ldap url="ldap://a.b.com/ou=MyUserOU,DC=a,DC=b,DC=com"
userstring="{username}@MYDOMAIN" updateinterval="60000" style="AD"
serviceAccountDN="mysearchuser@MYDOMAIN" serviceAccountCredential="password" />
</auth>
The LDAP configuration can be changed through an easy to use web page. To access this go to Configuration
> Manage Security and Authentication. Under the Authentication heading will be the current LDAP
configuration (the values will be empty if LDAP is not configured yet). Click on “Edit Authentication” to be
directed to a form to enter desired LDAP settings. Note: Changes made here will only take effect after a
server restart.
Messaging/Repository settings configuration can be done through the input definitions page. To get there go
37
to Configuration > Input Definitions in the menu bar. This page displays the current input definitions at the
top and at the bottom the current configuration of Messaging and Repository settings are displayed. To edit
these setting click “Edit Configuration”. Note: Changes made here will only take effect after a server restart.
On port 8452, disable admin UI, but enable WebTAK and non-admin UI:
<connector port="8452" _name="https" enableAdminUI="false" />
38
You will then see the following options.
39
To modify the VBM configurations select the checkbox next to the desired option and when you’re finished
click “Save changes”.
NOTE: “Disable SA Sharing” and “Disable Chat Sharing” will only be used if “Enable VBM” is selected.
The VBM options have the following impact:
If “Enable VBM” is selected, messages recieved on a data feed are only brokered to clients which are subscribed
to the mission if the message falls within the bounding box specified by the mission. For example, the message
represented by the blue dot would be passed on while the message represented by the green dot would be
filtered out for the mission with the displayed bounding box only if “Enable VBM” is turned on.
The second two options are only activated if “Enable VBM” is on and they refer to messages recieved from
inputs (server ports). These options filter messages based on whether they are chat messages. Chat messages
in this context are cot messages which have a type set to “b-t-f”.
If “Disable SA Sharing” is selected, messages recieved from inputs are passed on if the message is a chat
message as defined above.
If “Disable Chat Sharing” is selected, messages recieved from inputs are passed on if the messages is NOT a
chat message as defined above.
These options are not mutually exclusive. Therefore, having both selected will filter out all messages recieved
on inputs.
10 WebTAK
The WebTAK front-end application is bundled with TAK Server. The WebTAK back-end WebSockets
networking channel and APIs are provided by TAK Server. WebTAK must be accessed using https.
40
WebTAK can be accessed either with X.509 client certificates (default https port 8443), or by username-
password access using OAuth (https port 8446).
In either case, TAK Server must be configured with a server certificate and truststore (see Appendix B).
In the Admin UI menu, use Situation Awareness -> WebTAK to access WebTAK.
11 Device Profiles
TAK Server can now assist in provisioning ATAK devices through Device Profiles. The Device Profile Manager
(under Administrative Menu, Device Profiles) allows administrators to build profiles that can be applied to
clients when enrolling for certificates, and when connecting to TAK server. The Profile consists of a sets
of files, which can include settings and data in any file format that is supported by TAK Mission Packages.
Profiles can be made public or restricted to individual Groups.
When an ATAK device enrolls for client certificate, or optionally after connecting to TAK server, TAK server
will return all profiles that need to be applied to the device. The TAK server administrator can also push a
profile to a connected user by clicking the Send link within the Device Profile Manager.
12 Federation
12.1 Overview
Federation will allow subsets of ATAK users who are connected to different servers to work together, even
though each TAK server instance (hereafter refered to as ‘federates’) may be run by independent organizations
/ administrative domains. It brings some of the following benefits/restrictions:
1. Each administrative domain does not need to share anything about their internal structure
(e.g. LDAP/Active Directory information / users) with the other administrative domain.
2. Each administrative domain has control over what data they share with the other domain, but has no
control over what the other administrative domain does with data that is shared.
3. It requires no reconfiguration of ATAKs connected to either TAK Server, and the mechanism for
connecting the TAK Servers does not allow direct connections of ATAK devices from the other
administrative domain.
41
Do not forget to restart the server after changing the federation configuration in order for the changes to take
effect!
Generally, we share the public CA, which you can find at /opt/tak/cert/files/ca.pem, via some third channel
such as email or a USB drive. Once you have traded CAs, go the the Manage Federate Certifate Authorities
page and upload the CA of the federate you want to connect to.
42
enabled federation from step 1. You will now see three sections, Active Connections, Outgoing Connection
Configuration, and Federate Configuration. To create an outgoing connection, click on the corresponding link,
and enter in the address and port of the destination server. You can also pick the protocol version (make
sure it is the right protocol for the port you are connecting to!), reconnection interval (how long between
retries if the connection is lost), and whether or not the connection will be enabled on creation.
Now that you have created and started a connection, you will notice that no information is yet flowing
between federates. This is because you and your fellow federate must specify which filtering groups you
will allow to flow out of and into your server. To manage this, click on the Manage Groups link in the
corresponding row of the Federate Configuration section. Here you can specify the groups, including the
special __ANON__ group if you want. Once both servers have configured the groups, traffic will start to
flow. A server restart is not necessary for these changes to take effect.
43
12.5 Federated Group Mapping
The flow of traffic between Federates may be directed using end-to-end group mapping. The Federated Group
Mapping section is on the Federate Groups page.
Groups are exchanged during active connections between Federates. The remote groups will appear in the
‘Remote Group List’ drop down in the Federated Group Mapping section. Connected Federates must have
Federated Group Mapping enabled in order for the Federates to exchange their respective remote groups.
This parameter is in the Federation Configuration section in the Configuration > Manage Federates page.
To configure the end-to-end mapping, select a remote group and map it to a local Federate group. Remote
groups may also be entered directly in the ‘Remote Group’ field. A single remote group can be mapped
to many local groups. Additionally, multiple end-to-end group mappings may be defined. With a group
mapping configured, traffic from the remote group will only flow to the mapped local group(s). Note: if no
incoming traffic matches the remote groups configured, the federation traffic will fall back to the Federate
Group scheme described previously.
44
12.6 Mission Federation Disruption Tolerance
Traffic between federated servers may be disrupted, and updates to missions could happen during that
disruption. Mission federation disruption tolerance will update each server with changes to federated missions
that occured during the disruption. To enable this feature, check the box in the Federation Configuration
page:
45
Sending all the changes that occured between disruptions could potentially take a lot of bandwidth, so by
default, we limit the changes to those that occured within the last 2 days. For example, if a disruption lasted
3 weeks, we would only send the changes from the previous 2 days. However, if the disruption only lasted a
few hours, only the changes since the last disruption would be sent. If the Unlimited checkbox is checked,
then all changes since the last disruption would be sent. The 2 day limit can be changed to any length with
the Send Changes Newer Than setting, and the period can be selected as days, hours, or seconds.
It is also possible to override the global setting for a particular mission, if so desired.
For example, in the above image, we see that mission_2 will send updates up to over the last 10 days,
mission_2 only over the last 12 hours, and mission_4 will send all updates since the last disruption. Any
mission that is not listed, and any subsequently added mission, will follow the global setting of 2 days, as set
above.
46
The Clear Federation Events button will reset the disruption history for federation. This means that on the
next reconnection, the server will send the max allowed mission changes according to the Mission Federation
Disruption Tolerance settings. In the above case, that would be 10 days for mission_2, 12 hours for mission_3,
and the entire change history for mission_4. For all other missions this would be 2 days worth of mission
changes.
47
12.8 Federation Example
The figure below shows a connectivity graph of two distinct administrative domains. Each administrative
domain has multiple sub-groups (e.g. “CN=Alpha”) utilizing the group-filtering. The color coding indicates
the CA that is used to sign the certificate used for connections. Enclave 1’s CA signs ATAK client certs and
a server certificate. Enclave 2’s CA also signs ATAK client certs and a server cert. The trust-store listing the
allowed CAs for the “User Port” only contains a single CA (i.e. Enclave 1 CA for Enclave 1). To federate
the servers, Enclave 1 and Enclave 2 send each other the “public” CA cert. Those certificates are put in a
separate trust store that is used only for federation connections. The “Fed. Port” is configured with this
separate trust-store. The server cert from each administrative domain can now be used to connect to the
“Fed. Port” of the other domain.
This adds some complexity, but can be used if you don’t want to expose your ‘internal’ CA to the organizations
that you are federating with.
48
13 Metrics
The TAK Server Metrics Dashboard is available in the Monitoring menu. The dashboard continuously renders
the following information:
Server Start Time and Server Up Time This tell you when the server was turned on and how long it
has been operating.
Clients Connected This tells you how many connections your client is currently servicing. This corresponds
to the number of clients that are displayed in the client dashboard.
Heap Usage TAK server runs inside one or more Java Virtual Machines (JVM). Heap Commited is how
much heap memory in MB is allocated to the API process for TAK Server, and Heap Used is how much of
that is currently being used.
Network I/O and Reads/Writes This tells you how much TCP and UDP traffic the server is currently
handling, as well as a brief history.
CPU Usage How much of the CPU of the machine the server is running on is currently being used.
14 Logging
TAK Server provides several log files to provide information about relevant events that happen during
execution. The log files are located in the /opt/tak/logs directory. This table shows the name of the log files,
and their function.
49
federating multicast data. As TAK Server’s group filtering capabilities have evolved, having a dedicated
proxy attribute is no longer needed. Using filtergroup on the mcast input you can achieve greater control
over multicast traffic. The default behavior in TAK Server 4.1 and higher is to put multicast traffic in the
__ANON__ group. You can use a filtergroup on the mcast input to put your mcast traffic into a dedicated
multicast group, for example:
<input auth="anonymous" _name=" SAproxy " protocol="mcast" port="6969" group="239.2.3.1">
<filtergroup>__MCAST__</filtergroup>
</input>
Then add the __MCAST__ group as a filtergroup on any other inputs you wanted to share multicast traffic
with. For example, to share multicast traffic with the tls/8089, configure your input filtergroups as follows:
<input auth="anonymous" _name="stdssl1" protocol="tls" port="8089" archive="true">
<filtergroup>__ANON__</filtergroup>
<filtergroup>__MCAST__</filtergroup>
</input>
This same approach works for federations. You can __MCAST__ as an outboundGroup on any federates
that you wanted to share multicast traffic with. Using the filtergroup approach allows for creation of input
specific multicast groups, allowing control of how messages from multicast networks are routed.
16 OAuth2 Authentication
TAK Server provides OAuth2 Authorization and Resource server capabilities using the OAuth2 Password
authentication flow. OAuth2 integration works with existing authentication back ends, allowing TAK Server
to issue tokens backed by the File or LDAP authenticators. TAK Server issues JSON Web Tokens (JWT)
signed by the server certificate, allowing external systems to validate tokens against the server’s trust chain.
The OAuth2 token endpoint is available at https://<takserver>:8446/oauth/token.
17 User Management UI
17.1 Overview
The User Management UI provides an intuitive drag-and-drop mechanisms for managing TAK user accounts.
The tool is integrated within TAK Server and can be accessed from the TAK main menu, under Administrative
» Manage Users. Users need to have an admin role to access the tool. Currently the User Management
UI supports only file-based users and not LDAP/AD users. The tool allows TAK administrators to create,
manage, inspect and delete TAK user accounts. More specifically, the tool allows TAK administrators
to: - View, filter and search for existing user accounts and groups. - View a list of users in each group.
- Change password for each user account. - View and update groups (IN group, OUT group and both)
for each user account. - Delete user accounts. - Create a new user account with a specified password and
groups. Password complexity is checked to confirm compliance. - Create new user accounts in bulk with
username following a pattern. System uses password generation mechanism to create passwords that meet
TAK password complexity requirements. System produces output file with user/password combos as a
one-time downloadable item, after which system forgets the un-hashed passwords. - Create new groups.
17.2 Usage
The below figure shows the main page of the User Management UI. The left panel lists all user accounts,
which can be filtered using the Search box on the top. The right panel lists all existing groups, which can be
filtered using the Search box on the top.
50
To change user’s password, click on the arrow right next to the username and select “Change password”.
To view/edit groups for a user account, click on the arrow right next to the username and select “View/Edit
groups”. You can drag the groups from the right panel and drop to one of the three boxes in the middle
panel. Click on “Reset” button to bring the UI back to showing the current groups of the user. Click on
“Update” button to update the groups of the user.
51
To delete an account, click on the arrow right next to the username and select “Delete User”. You will be
prompted to either confirm or cancel the action.
To list all users in a group, click on the arrow right next to the group name and click on “List users”.
52
To create a new user, click on “Add User” on the menu bar.
To create new users in bulk, click on “Add Users” on the menu bar.
53
18 Data Retention Tool
Information regarding the use of the Data Retention Tool is available on the tak.gov wiki:
https://wiki.tak.gov/display/TPC/Data+Retention+Tool
54
/opt/tak/certs/cert-metadata.sh
Follow the instruction on “Configure TAK Server Certificate” to set up the server to use the generated certs
and to authenticate users on a TLS port. If using the default configuration, TLS will be correctly set up on
8443.
Become a normal user:
exit
Authorize the admin cert to perform administrative functions using the UI:
sudo java -jar /opt/tak/utils/UserManager.jar certmod -A /opt/tak/certs/files/admin.pem
55
3. In the <network> element, add a TLS input, specifying group-based filtering without requiring an
authentication message:
<input _name="stdssl" protocol="tls" port="8089" auth="x509"/>
56
<certificateSigning CA="{TAKServer | MicrosoftCA}">
<certificateConfig>
<nameEntries>
<nameEntry name="O" value="Test Org Name"/>
<nameEntry name="OU" value="Test Org Unit Name"/>
</nameEntries>
</certificateConfig>
<TAKServerCAConfig
keystore="JKS"
keystoreFile="../certs/files_intCA/intermediate-ca-signing.jks"
keystorePass="atakatak"
validityDays="30"
signatureAlg="SHA256WithRSA" />
<MicrosoftCAConfig
username="{MS CA Username}"
password="{MS CA Password}"
truststore="/opt/tak/certs/files_MSCA/keystore.jks"
truststorePass="atakatak"
svcUrl="https://win-kbtud3n1hjl.tak.net/tak-WIN-KBTUD3N1HJL-CA_CES_UsernamePassword/service.svc"
templateName="Copy of User"/>
</certificateSigning>
Prior to submitting a CSR, Clients query TAK Server for Relative Distinguished Names (RDNs) that need
to go into the CSR. The nameEntries element in CoreConfig.xml specifies the required RDNs, giving the
administrator control over generated certificates. The CN value in the CSR will be equal to the HTTP
username. TAK Server validates all required fields in the CSR prior to signing.
The extra step of having client query TAK Server for RDNs wouldn’t be required if TAK Server were signing
certificates exclusively, since TAK Server could just add these names to the certificate. However, when
proxying the CSR to an external CA, this allows additional flexibility in controlling the subject name within
the certificate.
The TAKServerCAConfig element specifies the keystore that TAK Server will use for signing certificates. The
keystore must hold the CA’s private key along with it’s full trust chain. The makeCert.sh script will produce
a signing keystore when generating an intermediate CA certificate. Certificates signed by TAK Server will be
valid for the specified validityDays, and will be signed using the algorithm specified by signatureAlg.
The MicrosoftCAConfig element defines how TAK Server will connect to the Certificate Enrollment Services
(CES) endpoint. The CES endpoint is defined by the svcUrl attribute. The CES endpoint must be configured
to use Username/Password authentication, and by default will include ‘UsernamePassword’ in the URL. The
username and password attributes refer to an account configured on the MS CA Server to access the the CES
endpoint. The truststore and truststorePass attrbitues point to a Java keystore (.jks) file that contains the
trust chain for the svcUrl endpoint. Lastly, the templateName defines the certificate template that will be
used to sign CSRs sent from TAK Server.
57
./makeCert.sh server takdb
• Update postgresql.conf. The file location can be different depending on your PostgreSQL installation:
– RHEL/Rocky/CentOS: /var/lib/pgsql/15/data/postgresql.conf
– Ubuntu/RaspPi: /etc/postgresql/15/main/postgresql.conf
sudo vim /var/lib/pgsql/15/data/postgresql.conf
ssl = on
ssl_ca_file = ’/opt/tak/certs/files/ca.pem’
ssl_cert_file = ’/opt/tak/certs/files/takdb.pem’
ssl_key_file = ’/opt/tak/certs/files/takdb.key’
# Make sure to update the next line to use the correct passphrase as configured in
cert-metadata.sh.
ssl_passphrase_command = ’echo "atakatak"’
ssl_passphrase_command_supports_reload = on
• Update pg_hba.conf. The file location can be different depending on your PostgreSQL installation:
– RHEL/Rocky/CentOS: /var/lib/pgsql/15/data/pg_hba.conf
– Ubuntu/RaspPi: /etc/postgresql/15/main/pg_hba.conf
sudo vim /var/lib/pgsql/15/data/pg_hba.conf
Client keys and certificates named “martiuser” (by default) will be created in the “files” directory.
• Test SSL connection using the generated client certificate:
psql "host=127.0.0.1 port=5432 user=martiuser dbname=cot sslmode=verify-ca
sslcert=files/martiuser.pem sslkey=files/martiuser.key sslrootcert=files/ca.pem"
58
psql "host=127.0.0.1 port=5432 user=martiuser dbname=cot sslmode=require
sslcert=files/martiuser.pem sslkey=files/martiuser.key"
The sslmode “verify-ca” means “I want to be sure that I connect to a server that I trust.” The sslmode
“require” means “I trust that the network will make sure I always connect to the server I want.”
More information on the sslmode can be found here: https://www.postgresql.org/docs/current/libpq-ssl.html
• Test database permission from the psql prompt:
select count(*) from cot_router;
NOTE: If you want to use a different name for certificates, you would also need to add a new user to the
PostgreSQL database and grant permissions for the user. For example, following these steps to create a
certificate named “takdbuser”
./makeCert.sh dbclient takdbuser
sudo su - postgres
Connect to Postgres:
psql -d cot
# List all users/roles:
\du
SELECT * FROM pg_roles;
# Create a new user ("takdbuser") and grant the user necessary roles ("martiuser"). The
name of the user must match the CN in the client certificate.
CREATE USER takdbuser;
grant martiuser to takdbuser;
# Optional: Double check using \du and "SELECT * FROM pg_roles;"
If you don’t want to verify the server’s credential (not recommended in production):
<connection url="jdbc:postgresql://127.0.0.1:5432/cot" username="martiuser"
sslEnabled="true" sslMode="require" sslCert="certs/files/martiuser.pem"
sslKey="certs/files/martiuser.key.pk8" />
59
23 Appendix E: Proper Use of Trusted CAs
TAK uses Mutual TLS (MTLS) authentication to establish secure communications channels between TAK
clients and TAK Server. It’s critical that deployments use a CA created by the TAK server scripts, or another
private CA, to establish the root of trust. Failure to follow this guidance could result in exposing
your deployment to a Man-In-The-Middle (MITM) attack.
• To ensure secure communications, it’s critical that truststores deployed to TAK clients only contain
CAs created by the TAK Server scripts or another private CA.
• There is never a need to add a LetsEncrypt, Digicert or any other public CA certificate to a truststore
on a TAK client or TAK Server.
• When using Quick Connect, the LetsEncrypt or DigiCert server certificate should only be configured
within your 8446 connector, and never within your <tls> configuration.
Appendix B of the TAK Server Configuration Guide (see Downloadable Resources section here
https://tak.gov/products/tak-server) contains steps for creating a root CA to use in your TAK deployment.
The makeRootCa.sh script creates a private key and self-signed certificate for the CA, and packages up the
CA certificate within truststores that can be configured on TAK clients and on TAK Server.
Appendix B contains additional steps for creating a client and server certificates, signed by the root CA. Ap-
pendix C describes TAK Server’s Certificate Enrollment capability (https://wiki.tak.gov/display/DEV/Certificate+Enrollment)
that automates the provisioning of client certificates. Users authenticate to the Certificate Enrollment
endpoints with username/password, provide a CSR and receive a signed client certificate in return.
When enrolling using a server certificate from a self-signed TAK CA, clients must be bootstrapped with
server’s CA certificate prior to enrollment. To streamline provisioning of clients, TAK provides the Quick
Connect feature that performs Certificate Enrollment using trust provided by LetsEncrypt or DigiCert CAs.
TAK clients have embedded the LetsEncrypt and DigiCert CAs and will use these CAs when validating
connections to the enrollment port. In this configuration, the TAK client will be able to leverage the embedded
LetsEncrypt CA certificate, along with TLS hostname verification, to ensure the integrity of the connection.
To configure Quick Connect, the TAK server admin adds the keystore, keystoreFile, and keystorePass
attributes on the 8446 connector to use the trusted server cert for enrollment, as shown below.
<connector port="8446" clientAuth="false" _name="cert_https" keystore="JKS"
keystoreFile="certs/files/letsencrypt-server-cert.jks"
keystorePass="example-pass"/>
When using Quick Connect, you never have to do any configuration with LetsEncrypt or DigiCert CA itself.
That is handled by embedding the CAs within the clients. The only reference to any key material from
LetsEncrypt or DigiCert within your environment will be the server certificate contained in keystoreFile
that’s referenced by your 8446 connector.
60