Project

General

Profile

PT-TLS SWIMA Server » History » Version 21

Andreas Steffen, 08.07.2017 07:41

1 1 Andreas Steffen
h1. PT-TLS SWIMA Server
2 1 Andreas Steffen
3 9 Andreas Steffen
{{>toc}}
4 9 Andreas Steffen
5 1 Andreas Steffen
h2. Installing the strongSwan TNC Software
6 1 Andreas Steffen
7 1 Andreas Steffen
First we have to install some additional Ubuntu packages needed for the strongSwan TNC build
8 1 Andreas Steffen
<pre>
9 2 Andreas Steffen
 sudo apt install libsystemd-dev libssl-dev libcurl4-openssl-dev sqlite3 libsqlite3-dev libjson0-dev
10 1 Andreas Steffen
</pre>
11 1 Andreas Steffen
12 1 Andreas Steffen
Download the lastest strongSwan tarball
13 1 Andreas Steffen
<pre>
14 1 Andreas Steffen
wget https://download.strongswan.org/strongswan-5.6.0dr1.tar.bz2
15 1 Andreas Steffen
</pre>
16 1 Andreas Steffen
17 1 Andreas Steffen
Unpack the tarball
18 1 Andreas Steffen
<pre>
19 1 Andreas Steffen
tar xf strongswan-5.6.0dr1.tar.bz2
20 1 Andreas Steffen
</pre>
21 1 Andreas Steffen
22 1 Andreas Steffen
and change into the strongSwan build directory
23 1 Andreas Steffen
<pre>
24 1 Andreas Steffen
cd strongswan-5.6.0dr1
25 1 Andreas Steffen
</pre>
26 1 Andreas Steffen
27 1 Andreas Steffen
Configure strongSwan with the following options
28 1 Andreas Steffen
<pre>
29 1 Andreas Steffen
./configure --prefix=/usr --sysconfdir=/etc --disable-gmp --enable-openssl --enable-tnc-imv --enable-tnc-pdp --enable-tnccs-20 --enable-imv-os --enable-imv-swima --enable-sqlite --enable-curl --disable-stroke --enable-swanctl --enable-systemd
30 1 Andreas Steffen
</pre>
31 1 Andreas Steffen
32 1 Andreas Steffen
Build and install strongSwan with the commands
33 1 Andreas Steffen
<pre>
34 1 Andreas Steffen
make; sudo make install
35 1 Andreas Steffen
</pre>
36 3 Andreas Steffen
37 14 Andreas Steffen
The following TNC server options have to be configured in */etc/strongswan.conf*
38 7 Andreas Steffen
<pre>
39 7 Andreas Steffen
charon-systemd {
40 7 Andreas Steffen
  journal {
41 7 Andreas Steffen
    default = 1
42 7 Andreas Steffen
    tnc = 2
43 7 Andreas Steffen
    imv = 3
44 7 Andreas Steffen
    pts = 2
45 7 Andreas Steffen
  }
46 7 Andreas Steffen
  syslog {
47 7 Andreas Steffen
    auth {
48 7 Andreas Steffen
      default = 0
49 7 Andreas Steffen
    }
50 7 Andreas Steffen
  }
51 7 Andreas Steffen
  plugins {
52 7 Andreas Steffen
    tnccs-20 {
53 7 Andreas Steffen
      max_batch_size = 131056
54 7 Andreas Steffen
      max_message_size = 131024
55 7 Andreas Steffen
    }
56 7 Andreas Steffen
    tnc-pdp {
57 7 Andreas Steffen
      server = tnc.example.org
58 7 Andreas Steffen
      pt_tls {
59 7 Andreas Steffen
        enable = yes
60 7 Andreas Steffen
      }
61 7 Andreas Steffen
      radius {
62 7 Andreas Steffen
        enable = no
63 7 Andreas Steffen
      }
64 7 Andreas Steffen
    }
65 7 Andreas Steffen
  }
66 7 Andreas Steffen
}
67 7 Andreas Steffen
68 7 Andreas Steffen
libtls {
69 7 Andreas Steffen
  suites = TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
70 7 Andreas Steffen
}
71 7 Andreas Steffen
72 7 Andreas Steffen
libimcv {
73 7 Andreas Steffen
  database = sqlite:///etc/pts/config.db
74 7 Andreas Steffen
  policy_script = ipsec imv_policy_manager
75 7 Andreas Steffen
  plugins {
76 7 Andreas Steffen
    imv-swima {
77 7 Andreas Steffen
      rest_api {
78 7 Andreas Steffen
        uri = https://admin-user:ietf99hackathon@tnc.example.com/api/
79 7 Andreas Steffen
        timeout = 360
80 7 Andreas Steffen
      }
81 7 Andreas Steffen
    }
82 7 Andreas Steffen
  }
83 1 Andreas Steffen
}
84 14 Andreas Steffen
</pre>
85 14 Andreas Steffen
86 14 Andreas Steffen
87 14 Andreas Steffen
The */etc/tnc_config* file defines which Integrity Measurement Collectors (IMVs) are loaded by the TNC server
88 14 Andreas Steffen
<pre>
89 14 Andreas Steffen
#IMV-Configuration
90 14 Andreas Steffen
IMV "OS"        /usr/lib/ipsec/imcvs/imv-os.so
91 14 Andreas Steffen
IMV "SWIMA"     /usr/lib/ipsec/imcvs/imv-swima.so
92 7 Andreas Steffen
</pre>
93 7 Andreas Steffen
94 11 Andreas Steffen
h2. Setting up a CA using the strongSwan "pki" Tool
95 3 Andreas Steffen
96 6 Andreas Steffen
The strongSwan *pki* tool is very powerful and easy to use. First we create a directory where all keys and certificates are going to be stored
97 3 Andreas Steffen
<pre>
98 3 Andreas Steffen
  sudo -s
99 3 Andreas Steffen
  mkdir /etc/pts
100 3 Andreas Steffen
  mkdir /etc/pts/pki
101 3 Andreas Steffen
  cd /etc/pts/pki
102 3 Andreas Steffen
</pre>
103 3 Andreas Steffen
104 3 Andreas Steffen
Then we generate an ECC public key pair for the Root CA and a matching self-signed CA certificate
105 3 Andreas Steffen
<pre>
106 3 Andreas Steffen
pki --gen --type ecdsa --size 256 --outform pem > caKey.pem
107 3 Andreas Steffen
pki --self --ca --in caKey.pem --type ecdsa --dn "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA" --lifetime 3652 --outform pem > caCert.pem
108 3 Andreas Steffen
</pre>
109 3 Andreas Steffen
110 3 Andreas Steffen
The CA certificate can be listed with the following command
111 3 Andreas Steffen
<pre>
112 3 Andreas Steffen
pki --print --in caCert.pem
113 3 Andreas Steffen
  subject:  "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
114 3 Andreas Steffen
  issuer:   "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
115 3 Andreas Steffen
  validity:  not before Jul 07 08:19:08 2017, ok
116 3 Andreas Steffen
             not after  Jul 07 08:19:08 2027, ok (expires in 3651 days)
117 3 Andreas Steffen
  serial:    3a:98:52:2e:75:a5:a5:8b
118 3 Andreas Steffen
  flags:     CA CRLSign self-signed
119 3 Andreas Steffen
  subjkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
120 3 Andreas Steffen
  pubkey:    ECDSA 256 bits
121 3 Andreas Steffen
  keyid:     85:94:42:42:d7:40:83:17:98:72:7f:d7:6b:4a:08:51:e8:5b:e0:63
122 3 Andreas Steffen
  subjkey:   81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
123 3 Andreas Steffen
</pre>
124 4 Andreas Steffen
125 4 Andreas Steffen
<pre>
126 4 Andreas Steffen
pki --req --in serverKey.pem --type ecdsa --dn "C=CZ, O=IETF, OU=SACM, CN=TNC Server" --san "tnc.example.com" --outform pem > serverReq.pem
127 4 Andreas Steffen
</pre>
128 4 Andreas Steffen
129 4 Andreas Steffen
<pre>
130 4 Andreas Steffen
pki --issue --cakey caKey.pem --cacert caCert.pem --in serverReq.pem --type pkcs10 --flag serverAuth --lifetime 1461 --outform pem > serverCert.pem
131 4 Andreas Steffen
</pre>
132 4 Andreas Steffen
133 4 Andreas Steffen
<pre>
134 4 Andreas Steffen
pki --print --in serverCert.pem
135 4 Andreas Steffen
  subject:  "C=CZ, O=IETF, OU=SACM, CN=TNC Server"
136 4 Andreas Steffen
  issuer:   "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
137 4 Andreas Steffen
  validity:  not before Jul 07 09:07:31 2017, ok
138 4 Andreas Steffen
             not after  Jul 07 09:07:31 2021, ok (expires in 1460 days)
139 4 Andreas Steffen
  serial:    40:53:6a:88:f5:52:50:3b
140 4 Andreas Steffen
  altNames:  tnc.example.com
141 4 Andreas Steffen
  flags:     serverAuth
142 4 Andreas Steffen
  authkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
143 4 Andreas Steffen
  subjkeyId: 9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce
144 4 Andreas Steffen
  pubkey:    ECDSA 256 bits
145 4 Andreas Steffen
  keyid:     15:91:40:5f:55:58:1f:9c:18:c1:89:6d:47:7c:bd:50:3d:b4:90:a1
146 4 Andreas Steffen
  subjkey:   9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce
147 1 Andreas Steffen
</pre>
148 4 Andreas Steffen
149 6 Andreas Steffen
The server key and the server and CA certificates are needed by the strongSwan TNC server and are therefore copied to the default locations.
150 5 Andreas Steffen
<pre>
151 5 Andreas Steffen
cp caCert.pem /etc/swanctl/x509ca
152 5 Andreas Steffen
cp serverCert.pem /etc/swanctl/x509
153 5 Andreas Steffen
cp serverKey.pem /etc/swanctl/ecdsa
154 5 Andreas Steffen
</pre>
155 19 Andreas Steffen
156 20 Andreas Steffen
The strongSwan *sw-collector* and *pt-tls-client* tools use the libcurl library for TLS connections. Because curl looks for X.509 certificate trust anchors in the /etc/ssl/certs directory, the private "IETF 99 Hackathon CA" must be added to the store of trusted CAs on each endpoint (i.e. TNC client) with the following commands
157 19 Andreas Steffen
<pre>
158 19 Andreas Steffen
cp caCert.pem /usr/local/share/ca-certificates/IETF99_Hackathon_CA.crt
159 19 Andreas Steffen
update-ca-certificates
160 19 Andreas Steffen
</pre>
161 19 Andreas Steffen
162 8 Andreas Steffen
Right after installation the strongSwan TNC daemon has to be enabled and started as a systemd service with the following commands
163 8 Andreas Steffen
<pre>
164 8 Andreas Steffen
sudo systemctl enable strongswan-swanctl
165 8 Andreas Steffen
sudo systemctl start strongswan-swanctl
166 8 Andreas Steffen
</pre>
167 8 Andreas Steffen
168 8 Andreas Steffen
In all subsequent reboots the *strongswan-swanctl* service will be started automatically. The following *swanctl* command shows that the service is running and that the certificates and keys have been loaded
169 8 Andreas Steffen
<pre>
170 8 Andreas Steffen
 swanctl --list-certs
171 8 Andreas Steffen
172 8 Andreas Steffen
List of X.509 End Entity Certificates
173 8 Andreas Steffen
174 8 Andreas Steffen
  subject:  "C=CZ, O=IETF, OU=SACM, CN=TNC Server"
175 8 Andreas Steffen
  issuer:   "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
176 8 Andreas Steffen
  validity:  not before Jul 07 09:07:31 2017, ok
177 8 Andreas Steffen
             not after  Jul 07 09:07:31 2021, ok (expires in 1460 days)
178 8 Andreas Steffen
  serial:    40:53:6a:88:f5:52:50:3b
179 8 Andreas Steffen
  altNames:  tnc.example.com
180 8 Andreas Steffen
  flags:     serverAuth
181 8 Andreas Steffen
  authkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
182 8 Andreas Steffen
  subjkeyId: 9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce
183 8 Andreas Steffen
  pubkey:    ECDSA 256 bits, has private key
184 8 Andreas Steffen
  keyid:     15:91:40:5f:55:58:1f:9c:18:c1:89:6d:47:7c:bd:50:3d:b4:90:a1
185 8 Andreas Steffen
  subjkey:   9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce
186 8 Andreas Steffen
187 8 Andreas Steffen
List of X.509 CA Certificates
188 8 Andreas Steffen
189 8 Andreas Steffen
  subject:  "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
190 8 Andreas Steffen
  issuer:   "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
191 8 Andreas Steffen
  validity:  not before Jul 07 08:19:08 2017, ok
192 8 Andreas Steffen
             not after  Jul 07 08:19:08 2027, ok (expires in 3651 days)
193 8 Andreas Steffen
  serial:    3a:98:52:2e:75:a5:a5:8b
194 8 Andreas Steffen
  flags:     CA CRLSign self-signed
195 8 Andreas Steffen
  subjkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
196 8 Andreas Steffen
  pubkey:    ECDSA 256 bits
197 8 Andreas Steffen
  keyid:     85:94:42:42:d7:40:83:17:98:72:7f:d7:6b:4a:08:51:e8:5b:e0:63
198 8 Andreas Steffen
  subjkey:   81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
199 9 Andreas Steffen
</pre>
200 9 Andreas Steffen
201 9 Andreas Steffen
h2. Install Apache Web Server
202 9 Andreas Steffen
203 9 Andreas Steffen
An Apache web server equipped with a *Web Server Gateway Interface (WSGI)* module is installed on Ubuntu by the single command
204 9 Andreas Steffen
<pre>
205 10 Andreas Steffen
sudo apt install apache2 libapache2-mod-wsgi
206 9 Andreas Steffen
</pre>
207 9 Andreas Steffen
208 12 Andreas Steffen
In order to secure the access to the web server we enable TLS
209 12 Andreas Steffen
<pre>
210 12 Andreas Steffen
a2enmod ssl
211 12 Andreas Steffen
</pre>
212 12 Andreas Steffen
213 9 Andreas Steffen
h3. Configure strongTNC Virtual Web Server
214 9 Andreas Steffen
215 16 Andreas Steffen
In the */etc/apache2/sites-available* directory create the following configuration file and name it e.g. *tnc.conf*:
216 9 Andreas Steffen
<pre>
217 9 Andreas Steffen
WSGIPythonPath /var/www/tnc
218 1 Andreas Steffen
219 12 Andreas Steffen
<VirtualHost *:443>
220 9 Andreas Steffen
    ServerName tnc.example.com
221 9 Andreas Steffen
    ServerAdmin webmaster@localhost
222 9 Andreas Steffen
223 9 Andreas Steffen
    DocumentRoot /var/www/tnc
224 9 Andreas Steffen
225 9 Andreas Steffen
    <Directory /var/www/tnc/config>
226 9 Andreas Steffen
        <Files wsgi.py>
227 9 Andreas Steffen
            Order deny,allow
228 9 Andreas Steffen
            Allow from all
229 9 Andreas Steffen
        </Files>
230 9 Andreas Steffen
    </Directory>
231 9 Andreas Steffen
232 9 Andreas Steffen
    WSGIScriptAlias / /var/www/tnc/config/wsgi.py
233 9 Andreas Steffen
    WSGIPassAuthorization On
234 1 Andreas Steffen
235 12 Andreas Steffen
    SSLEngine on
236 12 Andreas Steffen
    SSLCertificateFile    /etc/swanctl/x509/serverCert.pem
237 12 Andreas Steffen
    SSLCertificateKeyFile /etc/swanctl/ecdsa/serverKey.pem
238 12 Andreas Steffen
239 9 Andreas Steffen
    ErrorLog ${APACHE_LOG_DIR}/tnc/error.log
240 9 Andreas Steffen
    LogLevel warn
241 1 Andreas Steffen
    CustomLog ${APACHE_LOG_DIR}/tnc/access.log combined
242 11 Andreas Steffen
</VirtualHost>
243 1 Andreas Steffen
</pre>
244 11 Andreas Steffen
245 12 Andreas Steffen
The *tnc* log directory is created with
246 11 Andreas Steffen
<pre>
247 11 Andreas Steffen
sudo mkdir /var/log/apache2/tnc
248 9 Andreas Steffen
</pre>
249 9 Andreas Steffen
250 9 Andreas Steffen
h2. Initialize PTS Database
251 9 Andreas Steffen
252 9 Andreas Steffen
I you haven't done so yet during the strongSwan TNC server installation, initialize the PTS SQLite database and give group "www-data" write permission:
253 9 Andreas Steffen
<pre>
254 9 Andreas Steffen
cd /usr/share/strongswan/templates/database/imv/
255 9 Andreas Steffen
sudo cat tables.sql data.sql | sqlite3 /etc/pts/config.db
256 9 Andreas Steffen
sudo chgrp www-data /etc/pts /etc/pts/config.db
257 9 Andreas Steffen
sudo chmod g+w /etc/pts /etc/pts/config.db
258 9 Andreas Steffen
</pre>
259 9 Andreas Steffen
260 9 Andreas Steffen
h2. Installing the strongTNC Policy Manager
261 9 Andreas Steffen
262 9 Andreas Steffen
strongTNC is a web application based on the "Django":https://www.djangoproject.com/ framework which itself makes use of the Python scripting language. At least Django 1.8 and Python 2.6.5 are required.  For the following installation and configuration steps we assume an Ubuntu Linux platform but the procedure on other Linux distributions is quite similar.
263 9 Andreas Steffen
264 21 Andreas Steffen
h3. Installing strongTNC
265 9 Andreas Steffen
266 9 Andreas Steffen
The "strongTNC project":https://github.com/strongswan/strongTNC/ is hosted on GitHub. The latest release can be installed as follows
267 9 Andreas Steffen
<pre>
268 9 Andreas Steffen
wget https://github.com/strongswan/strongTNC/archive/master.zip
269 9 Andreas Steffen
unzip master.zip
270 9 Andreas Steffen
sudo mv strongTNC-master /var/www/tnc
271 9 Andreas Steffen
sudo chown -R www-data:www-data /var/www/tnc
272 9 Andreas Steffen
</pre>
273 9 Andreas Steffen
274 21 Andreas Steffen
h3. Installing Python/Django
275 9 Andreas Steffen
276 9 Andreas Steffen
If not present yet, install the following Ubuntu packages
277 9 Andreas Steffen
278 9 Andreas Steffen
<pre>
279 18 Andreas Steffen
sudo apt install python-pip python-dev libxml2-dev libxslt1-dev requests
280 9 Andreas Steffen
</pre>
281 9 Andreas Steffen
282 9 Andreas Steffen
In the */var/www/tnc* directory execute the command
283 9 Andreas Steffen
284 9 Andreas Steffen
<pre>
285 9 Andreas Steffen
sudo pip install -r requirements.txt
286 9 Andreas Steffen
</pre>
287 9 Andreas Steffen
288 9 Andreas Steffen
which updates the Django version if necessary and installs various Python modules.
289 9 Andreas Steffen
290 9 Andreas Steffen
h3. Configure strongTNC
291 9 Andreas Steffen
292 9 Andreas Steffen
Copy *config/settings.sample.ini* to */etc/strongTNC/settings.ini* and adapt the settings to your preferences.
293 9 Andreas Steffen
<pre>
294 9 Andreas Steffen
[debug]
295 15 Andreas Steffen
DEBUG = 1
296 15 Andreas Steffen
TEMPLATE_DEBUG = 0
297 15 Andreas Steffen
SQL_DEBUG = 0
298 15 Andreas Steffen
DEBUG_TOOLBAR = 0
299 9 Andreas Steffen
300 9 Andreas Steffen
[db]
301 15 Andreas Steffen
DJANGO_DB_URL = sqlite:////var/www/tnc/django.db
302 9 Andreas Steffen
STRONGTNC_DB_URL = sqlite:////etc/pts/config.db
303 9 Andreas Steffen
304 15 Andreas Steffen
[paths]
305 15 Andreas Steffen
STATIC_ROOT = static
306 9 Andreas Steffen
307 9 Andreas Steffen
[security]
308 15 Andreas Steffen
ALLOWED_HOSTS = 127.0.0.1,tnc.example.com
309 15 Andreas Steffen
CSRF_COOKIE_SECURE = 1
310 17 Andreas Steffen
311 17 Andreas Steffen
[localization]
312 17 Andreas Steffen
LANGUAGE_CODE = en-us
313 17 Andreas Steffen
TIME_ZONE = Etc/UTC
314 17 Andreas Steffen
315 17 Andreas Steffen
[admins]
316 17 Andreas Steffen
Your Name: andreas.steffen@strongswan.org
317 9 Andreas Steffen
</pre>
318 9 Andreas Steffen
319 20 Andreas Steffen
Create the django.db database where the login passwords are stored with the command
320 9 Andreas Steffen
<pre>
321 9 Andreas Steffen
sudo python /var/www/tnc/manage.py migrate --database meta
322 9 Andreas Steffen
</pre>
323 9 Andreas Steffen
324 15 Andreas Steffen
Next set the strongTNC access passwords ("ietf99hackathon" in our example):
325 9 Andreas Steffen
<pre>
326 9 Andreas Steffen
sudo python /var/www/tnc/manage.py setpassword
327 15 Andreas Steffen
--> Please enter a new password for admin-user: ietf99hackathon
328 9 Andreas Steffen
--> Granting write_access permission.
329 9 Andreas Steffen
Looking for readonly-user in database...
330 15 Andreas Steffen
--> Please enter a new password for readonly-user: ietf99hackathon
331 9 Andreas Steffen
Passwords updated successfully!
332 1 Andreas Steffen
</pre>
333 1 Andreas Steffen
334 21 Andreas Steffen
as well as the *admin* password
335 21 Andreas Steffen
<pre>
336 21 Andreas Steffen
sudo python /var/www/tnc/manage.py createsuperuser --database meta
337 21 Andreas Steffen
--> Username (leave blank to use 'root'): admin
338 21 Andreas Steffen
--> Email address: andreas.steffen@strongswan.org
339 21 Andreas Steffen
--> Password: ietf99hackathon
340 21 Andreas Steffen
--> Password (again): ietf99hackathon
341 21 Andreas Steffen
Superuser created successfully.
342 21 Andreas Steffen
</pre>
343 21 Andreas Steffen
344 9 Andreas Steffen
In order to get a correct display of the strongTNC web pages you have to execute the following command
345 9 Andreas Steffen
<pre>
346 1 Andreas Steffen
sudo python /var/www/tnc/manage.py collectstatic
347 9 Andreas Steffen
</pre>
348 9 Andreas Steffen
349 21 Andreas Steffen
h3. Starting the strongTNC Virtual Web Server
350 9 Andreas Steffen
351 9 Andreas Steffen
Now enable the virtual web server in the */etc/apache2/sites-enabled* directory and start it:
352 9 Andreas Steffen
<pre>
353 9 Andreas Steffen
cd /etc/apache2/sites-enabled
354 1 Andreas Steffen
sudo ln -s ../sites-available/tnc.conf tnc.conf
355 1 Andreas Steffen
sudo systemctl restart apache2
356 1 Andreas Steffen
</pre>
357 21 Andreas Steffen
358 21 Andreas Steffen
h3. Accessing the strongTNC Server
359 21 Andreas Steffen
360 21 Andreas Steffen
* The strongTNC GUI can be accessed as either "ReadOnly" *user* or "Read/Write" *admin-user* with "https://tnc.example.com/":https://tnc.example.com/
361 21 Andreas Steffen
362 21 Andreas Steffen
* The strongTNC REST API can accessed as *admin-user* with "https://tnc.example.com/api/":https://tnc.example.com/api/
363 21 Andreas Steffen
364 21 Andreas Steffen
* The Django database interface can be accessed as *admin* with "https://tnc.example.com/admin/":https://tnc.example.com/admin/
365 21 Andreas Steffen
366 21 Andreas Steffen
Since "tnc.example.com" cannot be resolved by DNS, add an entry to "/etc/hosts".