PT-TLS SWIMA Server » History » Version 8
Andreas Steffen, 07.07.2017 20:17
1 | 1 | Andreas Steffen | h1. PT-TLS SWIMA Server |
---|---|---|---|
2 | 1 | Andreas Steffen | |
3 | 1 | Andreas Steffen | h2. Installing the strongSwan TNC Software |
4 | 1 | Andreas Steffen | |
5 | 1 | Andreas Steffen | First we have to install some additional Ubuntu packages needed for the strongSwan TNC build |
6 | 1 | Andreas Steffen | <pre> |
7 | 2 | Andreas Steffen | sudo apt install libsystemd-dev libssl-dev libcurl4-openssl-dev sqlite3 libsqlite3-dev libjson0-dev |
8 | 1 | Andreas Steffen | </pre> |
9 | 1 | Andreas Steffen | |
10 | 1 | Andreas Steffen | Download the lastest strongSwan tarball |
11 | 1 | Andreas Steffen | <pre> |
12 | 1 | Andreas Steffen | wget https://download.strongswan.org/strongswan-5.6.0dr1.tar.bz2 |
13 | 1 | Andreas Steffen | </pre> |
14 | 1 | Andreas Steffen | |
15 | 1 | Andreas Steffen | Unpack the tarball |
16 | 1 | Andreas Steffen | <pre> |
17 | 1 | Andreas Steffen | tar xf strongswan-5.6.0dr1.tar.bz2 |
18 | 1 | Andreas Steffen | </pre> |
19 | 1 | Andreas Steffen | |
20 | 1 | Andreas Steffen | and change into the strongSwan build directory |
21 | 1 | Andreas Steffen | <pre> |
22 | 1 | Andreas Steffen | cd strongswan-5.6.0dr1 |
23 | 1 | Andreas Steffen | </pre> |
24 | 1 | Andreas Steffen | |
25 | 1 | Andreas Steffen | Configure strongSwan with the following options |
26 | 1 | Andreas Steffen | <pre> |
27 | 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 |
28 | 1 | Andreas Steffen | </pre> |
29 | 1 | Andreas Steffen | |
30 | 1 | Andreas Steffen | Build and install strongSwan with the commands |
31 | 1 | Andreas Steffen | <pre> |
32 | 1 | Andreas Steffen | make; sudo make install |
33 | 1 | Andreas Steffen | </pre> |
34 | 3 | Andreas Steffen | |
35 | 7 | Andreas Steffen | The following TNC server options have to be configured in /etc/strongswan.conf |
36 | 7 | Andreas Steffen | <pre> |
37 | 7 | Andreas Steffen | charon-systemd { |
38 | 7 | Andreas Steffen | journal { |
39 | 7 | Andreas Steffen | default = 1 |
40 | 7 | Andreas Steffen | tnc = 2 |
41 | 7 | Andreas Steffen | imv = 3 |
42 | 7 | Andreas Steffen | pts = 2 |
43 | 7 | Andreas Steffen | } |
44 | 7 | Andreas Steffen | syslog { |
45 | 7 | Andreas Steffen | auth { |
46 | 7 | Andreas Steffen | default = 0 |
47 | 7 | Andreas Steffen | } |
48 | 7 | Andreas Steffen | } |
49 | 7 | Andreas Steffen | plugins { |
50 | 7 | Andreas Steffen | tnccs-20 { |
51 | 7 | Andreas Steffen | max_batch_size = 131056 |
52 | 7 | Andreas Steffen | max_message_size = 131024 |
53 | 7 | Andreas Steffen | } |
54 | 7 | Andreas Steffen | tnc-pdp { |
55 | 7 | Andreas Steffen | server = tnc.example.org |
56 | 7 | Andreas Steffen | pt_tls { |
57 | 7 | Andreas Steffen | enable = yes |
58 | 7 | Andreas Steffen | } |
59 | 7 | Andreas Steffen | radius { |
60 | 7 | Andreas Steffen | enable = no |
61 | 7 | Andreas Steffen | } |
62 | 7 | Andreas Steffen | } |
63 | 7 | Andreas Steffen | } |
64 | 7 | Andreas Steffen | } |
65 | 7 | Andreas Steffen | |
66 | 7 | Andreas Steffen | libtls { |
67 | 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 |
68 | 7 | Andreas Steffen | } |
69 | 7 | Andreas Steffen | |
70 | 7 | Andreas Steffen | libimcv { |
71 | 7 | Andreas Steffen | database = sqlite:///etc/pts/config.db |
72 | 7 | Andreas Steffen | policy_script = ipsec imv_policy_manager |
73 | 7 | Andreas Steffen | plugins { |
74 | 7 | Andreas Steffen | imv-swima { |
75 | 7 | Andreas Steffen | rest_api { |
76 | 7 | Andreas Steffen | uri = https://admin-user:ietf99hackathon@tnc.example.com/api/ |
77 | 7 | Andreas Steffen | timeout = 360 |
78 | 7 | Andreas Steffen | } |
79 | 7 | Andreas Steffen | } |
80 | 7 | Andreas Steffen | } |
81 | 7 | Andreas Steffen | } |
82 | 7 | Andreas Steffen | </pre> |
83 | 7 | Andreas Steffen | |
84 | 3 | Andreas Steffen | h2. Setting up a Certificate Authority using the strongSwan "pki" Tool |
85 | 3 | Andreas Steffen | |
86 | 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 |
87 | 3 | Andreas Steffen | <pre> |
88 | 3 | Andreas Steffen | sudo -s |
89 | 3 | Andreas Steffen | mkdir /etc/pts |
90 | 3 | Andreas Steffen | mkdir /etc/pts/pki |
91 | 3 | Andreas Steffen | cd /etc/pts/pki |
92 | 3 | Andreas Steffen | </pre> |
93 | 3 | Andreas Steffen | |
94 | 3 | Andreas Steffen | Then we generate an ECC public key pair for the Root CA and a matching self-signed CA certificate |
95 | 3 | Andreas Steffen | <pre> |
96 | 3 | Andreas Steffen | pki --gen --type ecdsa --size 256 --outform pem > caKey.pem |
97 | 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 |
98 | 3 | Andreas Steffen | </pre> |
99 | 3 | Andreas Steffen | |
100 | 3 | Andreas Steffen | The CA certificate can be listed with the following command |
101 | 3 | Andreas Steffen | <pre> |
102 | 3 | Andreas Steffen | pki --print --in caCert.pem |
103 | 3 | Andreas Steffen | subject: "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA" |
104 | 3 | Andreas Steffen | issuer: "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA" |
105 | 3 | Andreas Steffen | validity: not before Jul 07 08:19:08 2017, ok |
106 | 3 | Andreas Steffen | not after Jul 07 08:19:08 2027, ok (expires in 3651 days) |
107 | 3 | Andreas Steffen | serial: 3a:98:52:2e:75:a5:a5:8b |
108 | 3 | Andreas Steffen | flags: CA CRLSign self-signed |
109 | 3 | Andreas Steffen | subjkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84 |
110 | 3 | Andreas Steffen | pubkey: ECDSA 256 bits |
111 | 3 | Andreas Steffen | keyid: 85:94:42:42:d7:40:83:17:98:72:7f:d7:6b:4a:08:51:e8:5b:e0:63 |
112 | 3 | Andreas Steffen | subjkey: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84 |
113 | 3 | Andreas Steffen | </pre> |
114 | 4 | Andreas Steffen | |
115 | 4 | Andreas Steffen | <pre> |
116 | 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 |
117 | 4 | Andreas Steffen | </pre> |
118 | 4 | Andreas Steffen | |
119 | 4 | Andreas Steffen | <pre> |
120 | 4 | Andreas Steffen | pki --issue --cakey caKey.pem --cacert caCert.pem --in serverReq.pem --type pkcs10 --flag serverAuth --lifetime 1461 --outform pem > serverCert.pem |
121 | 4 | Andreas Steffen | </pre> |
122 | 4 | Andreas Steffen | |
123 | 4 | Andreas Steffen | <pre> |
124 | 4 | Andreas Steffen | pki --print --in serverCert.pem |
125 | 4 | Andreas Steffen | subject: "C=CZ, O=IETF, OU=SACM, CN=TNC Server" |
126 | 4 | Andreas Steffen | issuer: "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA" |
127 | 4 | Andreas Steffen | validity: not before Jul 07 09:07:31 2017, ok |
128 | 4 | Andreas Steffen | not after Jul 07 09:07:31 2021, ok (expires in 1460 days) |
129 | 4 | Andreas Steffen | serial: 40:53:6a:88:f5:52:50:3b |
130 | 4 | Andreas Steffen | altNames: tnc.example.com |
131 | 4 | Andreas Steffen | flags: serverAuth |
132 | 4 | Andreas Steffen | authkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84 |
133 | 4 | Andreas Steffen | subjkeyId: 9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce |
134 | 4 | Andreas Steffen | pubkey: ECDSA 256 bits |
135 | 4 | Andreas Steffen | keyid: 15:91:40:5f:55:58:1f:9c:18:c1:89:6d:47:7c:bd:50:3d:b4:90:a1 |
136 | 4 | Andreas Steffen | subjkey: 9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce |
137 | 1 | Andreas Steffen | </pre> |
138 | 4 | Andreas Steffen | |
139 | 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. |
140 | 5 | Andreas Steffen | <pre> |
141 | 5 | Andreas Steffen | cp caCert.pem /etc/swanctl/x509ca |
142 | 5 | Andreas Steffen | cp serverCert.pem /etc/swanctl/x509 |
143 | 5 | Andreas Steffen | cp serverKey.pem /etc/swanctl/ecdsa |
144 | 5 | Andreas Steffen | </pre> |
145 | 8 | Andreas Steffen | Right after installation the strongSwan TNC daemon has to be enabled and started as a systemd service with the following commands |
146 | 8 | Andreas Steffen | <pre> |
147 | 8 | Andreas Steffen | sudo systemctl enable strongswan-swanctl |
148 | 8 | Andreas Steffen | sudo systemctl start strongswan-swanctl |
149 | 8 | Andreas Steffen | </pre> |
150 | 8 | Andreas Steffen | |
151 | 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 |
152 | 8 | Andreas Steffen | <pre> |
153 | 8 | Andreas Steffen | swanctl --list-certs |
154 | 8 | Andreas Steffen | |
155 | 8 | Andreas Steffen | List of X.509 End Entity Certificates |
156 | 8 | Andreas Steffen | |
157 | 8 | Andreas Steffen | subject: "C=CZ, O=IETF, OU=SACM, CN=TNC Server" |
158 | 8 | Andreas Steffen | issuer: "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA" |
159 | 8 | Andreas Steffen | validity: not before Jul 07 09:07:31 2017, ok |
160 | 8 | Andreas Steffen | not after Jul 07 09:07:31 2021, ok (expires in 1460 days) |
161 | 8 | Andreas Steffen | serial: 40:53:6a:88:f5:52:50:3b |
162 | 8 | Andreas Steffen | altNames: tnc.example.com |
163 | 8 | Andreas Steffen | flags: serverAuth |
164 | 8 | Andreas Steffen | authkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84 |
165 | 8 | Andreas Steffen | subjkeyId: 9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce |
166 | 8 | Andreas Steffen | pubkey: ECDSA 256 bits, has private key |
167 | 8 | Andreas Steffen | keyid: 15:91:40:5f:55:58:1f:9c:18:c1:89:6d:47:7c:bd:50:3d:b4:90:a1 |
168 | 8 | Andreas Steffen | subjkey: 9c:83:b7:e9:0a:7d:dd:08:1f:2d:c5:c6:cc:63:c0:3f:96:57:a2:ce |
169 | 8 | Andreas Steffen | |
170 | 8 | Andreas Steffen | List of X.509 CA Certificates |
171 | 8 | Andreas Steffen | |
172 | 8 | Andreas Steffen | subject: "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA" |
173 | 8 | Andreas Steffen | issuer: "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA" |
174 | 8 | Andreas Steffen | validity: not before Jul 07 08:19:08 2017, ok |
175 | 8 | Andreas Steffen | not after Jul 07 08:19:08 2027, ok (expires in 3651 days) |
176 | 8 | Andreas Steffen | serial: 3a:98:52:2e:75:a5:a5:8b |
177 | 8 | Andreas Steffen | flags: CA CRLSign self-signed |
178 | 8 | Andreas Steffen | subjkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84 |
179 | 8 | Andreas Steffen | pubkey: ECDSA 256 bits |
180 | 8 | Andreas Steffen | keyid: 85:94:42:42:d7:40:83:17:98:72:7f:d7:6b:4a:08:51:e8:5b:e0:63 |
181 | 8 | Andreas Steffen | subjkey: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84 |
182 | 8 | Andreas Steffen | </pre> |