Project

General

Profile

PT-TLS SWIMA Client » History » Version 14

Andreas Steffen, 08.07.2017 08:36

1 1 Andreas Steffen
h1. PT-TLS SWIMA Client
2 1 Andreas Steffen
3 12 Andreas Steffen
{{>toc}}
4 12 Andreas Steffen
5 1 Andreas Steffen
h2. Installing the strongSwan TNC Software
6 1 Andreas Steffen
7 4 Andreas Steffen
First we have to install some additional Ubuntu packages needed for the strongSwan TNC build
8 4 Andreas Steffen
<pre>
9 7 Andreas Steffen
 sudo apt install libssl-dev libcurl4-openssl-dev sqlite3 libsqlite3-dev libjson0-dev
10 4 Andreas Steffen
</pre>
11 4 Andreas Steffen
12 1 Andreas Steffen
Download the lastest strongSwan tarball
13 1 Andreas Steffen
<pre>
14 2 Andreas Steffen
wget https://download.strongswan.org/strongswan-5.6.0dr1.tar.bz2
15 1 Andreas Steffen
</pre>
16 1 Andreas Steffen
17 5 Andreas Steffen
Unpack the tarball
18 1 Andreas Steffen
<pre>
19 1 Andreas Steffen
tar xf strongswan-5.6.0dr1.tar.bz2
20 2 Andreas Steffen
</pre>
21 2 Andreas Steffen
22 2 Andreas Steffen
and change into the strongSwan build directory
23 2 Andreas Steffen
<pre>
24 6 Andreas Steffen
cd strongswan-5.6.0dr1
25 2 Andreas Steffen
</pre>
26 2 Andreas Steffen
27 2 Andreas Steffen
Configure strongSwan with the following options
28 2 Andreas Steffen
<pre>
29 6 Andreas Steffen
./configure --prefix=/usr --sysconfdir=/etc --disable-gmp --enable-openssl --enable-tnc-imc --enable-tnccs-20 --enable-imc-os --enable-imc-swima --enable-sqlite --enable-curl
30 4 Andreas Steffen
</pre>
31 4 Andreas Steffen
32 4 Andreas Steffen
Build and install strongSwan with the commands
33 4 Andreas Steffen
<pre>
34 1 Andreas Steffen
make; sudo make install
35 7 Andreas Steffen
</pre>
36 7 Andreas Steffen
37 7 Andreas Steffen
h2. Configure the strongSwan "sw-collector" Tool
38 7 Andreas Steffen
39 10 Andreas Steffen
The *sw-collector* tool allows all software installation events to be collected and stored in an SQLite database. Currently only *apt* history logs generated by the *dpkg* packet manager (Debian, Ubuntu, etc.) can be parsed. Since the tool is installed in a rather unusual place together with other strongSwan executables, we define the following symbolic link
40 1 Andreas Steffen
<pre>
41 9 Andreas Steffen
sudo ln -s /usr/libexec/ipsec/sw-collector /usr/sbin/sw-collector
42 9 Andreas Steffen
</pre>
43 9 Andreas Steffen
44 9 Andreas Steffen
Then we set up a clean collector database with the command
45 9 Andreas Steffen
<pre>
46 7 Andreas Steffen
sudo -s
47 7 Andreas Steffen
mkdir /etc/pts
48 7 Andreas Steffen
cat /usr/share/strongswan/templates/database/sw-collector/sw_collector_tables.sql | sqlite3 /etc/pts/collector.db
49 7 Andreas Steffen
</pre>
50 7 Andreas Steffen
51 7 Andreas Steffen
The *sw-collector* needs some options defined in the */etc/strongswan.conf*/ configuration file
52 7 Andreas Steffen
<pre>
53 7 Andreas Steffen
sw-collector {
54 7 Andreas Steffen
  database = sqlite:///etc/pts/collector.db
55 7 Andreas Steffen
  history = /var/log/apt/history.log
56 7 Andreas Steffen
  first_time = 2017-02-15T20:20:34Z
57 7 Andreas Steffen
  rest_api {
58 8 Andreas Steffen
    uri = https://admin-user:ietf99hackathon@tnc.example.com/api/
59 7 Andreas Steffen
  }
60 7 Andreas Steffen
}
61 7 Andreas Steffen
</pre>
62 7 Andreas Steffen
63 7 Andreas Steffen
The date of the original OS installation can be found e.g. with the command
64 7 Andreas Steffen
<pre>
65 7 Andreas Steffen
ls -l --full-time /var/log/bootstrap.log
66 1 Andreas Steffen
-rw-r--r-- 1 root root 57457 2017-02-15 12:20:34.000000000 -0800 /var/log/bootstrap.log
67 9 Andreas Steffen
</pre>
68 9 Andreas Steffen
69 9 Andreas Steffen
Then we are ready to populate the collector database with all installation events that have already happened. Since there are usually up to 2000 software packages we reduce the debug level for the initial run
70 9 Andreas Steffen
<pre>
71 9 Andreas Steffen
sudo sw-collector --debug 1
72 9 Andreas Steffen
73 9 Andreas Steffen
First-Date: 2017-02-15T20:20:34Z, eid = 1, epoch = 1849176721
74 9 Andreas Steffen
processing "/etc/lsb-release" file
75 9 Andreas Steffen
operating system name is 'Ubuntu'
76 9 Andreas Steffen
operating system version is '16.04 x86_64'
77 9 Andreas Steffen
Last-Event: 2017-02-15T20:20:34Z, eid = 1, epoch = 1849176721
78 9 Andreas Steffen
Start-Date: 2017-02-16T04:20:50Z, eid = 2, epoch = 1849176721
79 9 Andreas Steffen
  Upgrade:
80 9 Andreas Steffen
Start-Date: 2017-02-16T04:23:44Z, eid = 3, epoch = 1849176721
81 9 Andreas Steffen
  Install:
82 9 Andreas Steffen
Start-Date: 2017-02-16T04:37:48Z, eid = 4, epoch = 1849176721
83 9 Andreas Steffen
  Install:
84 9 Andreas Steffen
Start-Date: 2017-07-07T13:17:46Z, eid = 5, epoch = 1849176721
85 9 Andreas Steffen
  Upgrade:
86 9 Andreas Steffen
Start-Date: 2017-07-07T13:18:15Z, eid = 6, epoch = 1849176721
87 9 Andreas Steffen
Start-Date: 2017-07-07T13:18:23Z, eid = 7, epoch = 1849176721
88 9 Andreas Steffen
  Purge:
89 9 Andreas Steffen
Start-Date: 2017-07-07T13:19:08Z, eid = 8, epoch = 1849176721
90 9 Andreas Steffen
Start-Date: 2017-07-07T13:20:01Z, eid = 9, epoch = 1849176721
91 9 Andreas Steffen
  Install:
92 9 Andreas Steffen
Start-Date: 2017-07-07T13:20:10Z, eid = 10, epoch = 1849176721
93 9 Andreas Steffen
  Install:
94 9 Andreas Steffen
Start-Date: 2017-07-07T13:24:09Z, eid = 11, epoch = 1849176721
95 9 Andreas Steffen
  Install:
96 9 Andreas Steffen
Start-Date: 2017-07-07T13:41:44Z, eid = 12, epoch = 1849176721
97 9 Andreas Steffen
  Install:
98 9 Andreas Steffen
  Upgrade:
99 9 Andreas Steffen
Start-Date: 2017-07-07T13:55:18Z, eid = 13, epoch = 1849176721
100 9 Andreas Steffen
  Install:
101 9 Andreas Steffen
Start-Date: 2017-07-07T13:57:02Z, eid = 14, epoch = 1849176721
102 9 Andreas Steffen
  Install:
103 9 Andreas Steffen
Start-Date: 2017-07-07T13:58:05Z, eid = 15, epoch = 1849176721
104 9 Andreas Steffen
  Install:
105 9 Andreas Steffen
  Upgrade:
106 9 Andreas Steffen
Start-Date: 2017-07-07T14:01:13Z, eid = 16, epoch = 1849176721
107 9 Andreas Steffen
  Install:
108 9 Andreas Steffen
Start-Date: 2017-07-07T14:02:23Z, eid = 17, epoch = 1849176721
109 9 Andreas Steffen
  Install:
110 9 Andreas Steffen
Start-Date: 2017-07-07T14:03:52Z, eid = 18, epoch = 1849176721
111 9 Andreas Steffen
  Install:
112 9 Andreas Steffen
  Upgrade:
113 9 Andreas Steffen
Start-Date: 2017-07-07T14:24:12Z, eid = 19, epoch = 1849176721
114 9 Andreas Steffen
  Install:
115 9 Andreas Steffen
Merging:
116 9 Andreas Steffen
  merged 1741 installed packages, 1741 registered in database
117 1 Andreas Steffen
</pre>
118 11 Andreas Steffen
119 11 Andreas Steffen
h2. Creating a Client Certificate
120 11 Andreas Steffen
121 11 Andreas Steffen
Using the strongSwan *pki* tool and the CA created in the [[SwimaServer|PT-TLS SWIMA Server]] section, an end entity certificate can be generated in the following way in the "/etc/pts/pki" directory
122 11 Andreas Steffen
<pre>
123 11 Andreas Steffen
pki --gen --type ecdsa --size 256 --outform pem > client1_Key.pem
124 11 Andreas Steffen
pki --req --in client1_Key.pem --type ecdsa --dn "C=CZ, O=IETF, OU=SACM, CN=TNC Client 1" --san "client1.example.com" --outform pem > client1_Req.pem
125 11 Andreas Steffen
</pre>
126 11 Andreas Steffen
127 11 Andreas Steffen
The PKCS#10 certificate request can now be signed by the CA
128 11 Andreas Steffen
<pre>
129 11 Andreas Steffen
 pki --issue --cakey caKey.pem --cacert caCert.pem --in client1_Req.pem --type pkcs10 --lifetime 1461 --outform pem > client1_Cert.pem
130 11 Andreas Steffen
</pre>
131 11 Andreas Steffen
132 11 Andreas Steffen
The certificate info can be displayed with
133 11 Andreas Steffen
<pre>
134 11 Andreas Steffen
pki --print --in client1_Cert.pem
135 11 Andreas Steffen
  subject:  "C=CZ, O=IETF, OU=SACM, CN=TNC Client 1"
136 11 Andreas Steffen
  issuer:   "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
137 11 Andreas Steffen
  validity:  not before Jul 07 22:58:17 2017, ok
138 11 Andreas Steffen
             not after  Jul 07 22:58:17 2021, ok (expires in 1460 days)
139 11 Andreas Steffen
  serial:    30:b7:f1:4b:e4:64:3a:5e
140 11 Andreas Steffen
  altNames:  client1.example.com
141 11 Andreas Steffen
  authkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
142 11 Andreas Steffen
  subjkeyId: 32:1f:29:04:6d:16:86:02:3f:c2:09:b9:4d:4d:82:de:95:92:ed:4d
143 11 Andreas Steffen
  pubkey:    ECDSA 256 bits
144 11 Andreas Steffen
  keyid:     f5:7b:fa:bd:ba:f9:72:91:33:91:0d:70:c5:90:36:12:30:1c:f3:25
145 11 Andreas Steffen
  subjkey:   32:1f:29:04:6d:16:86:02:3f:c2:09:b9:4d:4d:82:de:95:92:ed:4d
146 11 Andreas Steffen
</pre>
147 11 Andreas Steffen
148 11 Andreas Steffen
h2. Configuring the strongSwan "pt-tls-client" Tool
149 11 Andreas Steffen
150 11 Andreas Steffen
The *pt-tls-client* tool need some configurations in "/etc/strongswan.conf"
151 11 Andreas Steffen
<pre>
152 11 Andreas Steffen
pt-tls-client {
153 14 Andreas Steffen
  load = random nonce x509 revocation constraints openssl pkcs1 pkcs8 pem pubkey tnc-imc tnc-tnccs tnccs-20 curl sqlite
154 14 Andreas Steffen
155 11 Andreas Steffen
  plugins {
156 11 Andreas Steffen
    tnccs-20 {
157 11 Andreas Steffen
      max_batch_size = 131056
158 11 Andreas Steffen
      max_message_size = 131024
159 11 Andreas Steffen
    }
160 11 Andreas Steffen
  }
161 11 Andreas Steffen
}
162 13 Andreas Steffen
163 13 Andreas Steffen
libtls {
164 13 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
165 13 Andreas Steffen
}
166 13 Andreas Steffen
167 13 Andreas Steffen
libimcv {
168 13 Andreas Steffen
  plugins {
169 13 Andreas Steffen
    imc-os {
170 13 Andreas Steffen
      device_cert = /etc/pts/pki/client1_Cert.pem
171 13 Andreas Steffen
    }
172 13 Andreas Steffen
    imc-swima {
173 13 Andreas Steffen
      swid_full = yes
174 13 Andreas Steffen
      swid_database = sqlite:///etc/pts/collector.db
175 13 Andreas Steffen
    }
176 13 Andreas Steffen
  }
177 13 Andreas Steffen
}
178 13 Andreas Steffen
</pre>
179 13 Andreas Steffen
180 13 Andreas Steffen
The */etc/tnc_config* file defines which Integrity Measurement Collectors (IMCs) are loaded by the TNC server
181 13 Andreas Steffen
<pre>
182 13 Andreas Steffen
#IMC-Configuration
183 13 Andreas Steffen
IMC "OS"        /usr/lib/ipsec/imcvs/imc-os.so
184 13 Andreas Steffen
IMC "SWIMA"     /usr/lib/ipsec/imcvs/imc-swima.so
185 11 Andreas Steffen
</pre>
186 11 Andreas Steffen
187 11 Andreas Steffen
The PT-TLS connection parameters are given on the command line. In order to save some typing work we store the parameters in the "/etc/pts/options" file
188 11 Andreas Steffen
<pre>
189 11 Andreas Steffen
--connect tnc.example.com
190 11 Andreas Steffen
--cert /etc/pts/pki/caCert.pem
191 11 Andreas Steffen
--cert /etc/pts/pki/client1_Cert.pem
192 11 Andreas Steffen
--key /etc/pts/pki/client1_Key.pem
193 11 Andreas Steffen
--debug 1
194 11 Andreas Steffen
</pre>
195 11 Andreas Steffen
196 11 Andreas Steffen
Next we install the following shortcut for the pt-tls-client tool
197 11 Andreas Steffen
<pre>
198 11 Andreas Steffen
sudo ln -s /usr/libexec/ipsec/pt-tls-client/ /usr/bin/pt-tls-client
199 11 Andreas Steffen
</pre>
200 11 Andreas Steffen
201 11 Andreas Steffen
The SWIMA measurements on the endpoint are now transmitted with the simple command
202 11 Andreas Steffen
<pre>
203 11 Andreas Steffen
pt-tls-client --optionsfrom /etc/pts/options
204 11 Andreas Steffen
</pre>