Project

General

Profile

PT-TLS SWIMA Client » History » Version 26

Andreas Steffen, 05.08.2018 21:23

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 15 Andreas Steffen
Download the latest strongSwan tarball
13 1 Andreas Steffen
<pre>
14 25 Andreas Steffen
wget https://download.strongswan.org/strongswan-5.7.0dr8.tar.bz2
15 1 Andreas Steffen
</pre>
16 1 Andreas Steffen
17 5 Andreas Steffen
Unpack the tarball
18 1 Andreas Steffen
<pre>
19 25 Andreas Steffen
tar xf strongswan-5.7.0dr8.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 25 Andreas Steffen
cd strongswan-5.7.0dr8
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 9 Andreas Steffen
h2. Configure the strongSwan "sw-collector" Tool
38 9 Andreas Steffen
39 22 Andreas Steffen
The [[SwCollector|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. We set up a clean collector database with the command
40 9 Andreas Steffen
<pre>
41 7 Andreas Steffen
sudo -s
42 7 Andreas Steffen
mkdir /etc/pts
43 7 Andreas Steffen
cat /usr/share/strongswan/templates/database/sw-collector/sw_collector_tables.sql | sqlite3 /etc/pts/collector.db
44 7 Andreas Steffen
</pre>
45 7 Andreas Steffen
46 22 Andreas Steffen
The [[SwCollector|sw-collector]] needs some options defined in */etc/strongswan.conf*
47 7 Andreas Steffen
<pre>
48 7 Andreas Steffen
sw-collector {
49 7 Andreas Steffen
  database = sqlite:///etc/pts/collector.db
50 7 Andreas Steffen
  history = /var/log/apt/history.log
51 26 Andreas Steffen
  # first_file = /var/log/bootstrap.log
52 26 Andreas Steffen
  # first_time = 2017-02-15T20:20:34Z
53 7 Andreas Steffen
  rest_api {
54 8 Andreas Steffen
    uri = https://admin-user:ietf99hackathon@tnc.example.com/api/
55 7 Andreas Steffen
  }
56 7 Andreas Steffen
}
57 9 Andreas Steffen
</pre>
58 9 Andreas Steffen
59 26 Andreas Steffen
By default the installation date of the original Linux OS will be determined from the creation date of the file */var/log/bootstrap.log*. If this file does not existe then another file name can be given using the *first_file* parameter. As alternative an approximate installation date can be set with the  *first_time* parameter. Now 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
60 9 Andreas Steffen
<pre>
61 9 Andreas Steffen
sudo sw-collector --debug 1
62 9 Andreas Steffen
63 9 Andreas Steffen
First-Date: 2017-02-15T20:20:34Z, eid = 1, epoch = 1849176721
64 9 Andreas Steffen
processing "/etc/lsb-release" file
65 9 Andreas Steffen
operating system name is 'Ubuntu'
66 9 Andreas Steffen
operating system version is '16.04 x86_64'
67 9 Andreas Steffen
Last-Event: 2017-02-15T20:20:34Z, eid = 1, epoch = 1849176721
68 9 Andreas Steffen
Start-Date: 2017-02-16T04:20:50Z, eid = 2, epoch = 1849176721
69 9 Andreas Steffen
  Upgrade:
70 9 Andreas Steffen
Start-Date: 2017-02-16T04:23:44Z, eid = 3, epoch = 1849176721
71 9 Andreas Steffen
  Install:
72 9 Andreas Steffen
Start-Date: 2017-02-16T04:37:48Z, eid = 4, epoch = 1849176721
73 9 Andreas Steffen
  Install:
74 9 Andreas Steffen
Start-Date: 2017-07-07T13:17:46Z, eid = 5, epoch = 1849176721
75 9 Andreas Steffen
  Upgrade:
76 9 Andreas Steffen
Start-Date: 2017-07-07T13:18:15Z, eid = 6, epoch = 1849176721
77 9 Andreas Steffen
Start-Date: 2017-07-07T13:18:23Z, eid = 7, epoch = 1849176721
78 9 Andreas Steffen
  Purge:
79 9 Andreas Steffen
Start-Date: 2017-07-07T13:19:08Z, eid = 8, epoch = 1849176721
80 9 Andreas Steffen
Start-Date: 2017-07-07T13:20:01Z, eid = 9, epoch = 1849176721
81 9 Andreas Steffen
  Install:
82 9 Andreas Steffen
Start-Date: 2017-07-07T13:20:10Z, eid = 10, epoch = 1849176721
83 9 Andreas Steffen
  Install:
84 9 Andreas Steffen
Start-Date: 2017-07-07T13:24:09Z, eid = 11, epoch = 1849176721
85 9 Andreas Steffen
  Install:
86 9 Andreas Steffen
Start-Date: 2017-07-07T13:41:44Z, eid = 12, epoch = 1849176721
87 9 Andreas Steffen
  Install:
88 9 Andreas Steffen
  Upgrade:
89 9 Andreas Steffen
Start-Date: 2017-07-07T13:55:18Z, eid = 13, epoch = 1849176721
90 9 Andreas Steffen
  Install:
91 9 Andreas Steffen
Start-Date: 2017-07-07T13:57:02Z, eid = 14, epoch = 1849176721
92 9 Andreas Steffen
  Install:
93 9 Andreas Steffen
Start-Date: 2017-07-07T13:58:05Z, eid = 15, epoch = 1849176721
94 9 Andreas Steffen
  Install:
95 9 Andreas Steffen
  Upgrade:
96 9 Andreas Steffen
Start-Date: 2017-07-07T14:01:13Z, eid = 16, epoch = 1849176721
97 9 Andreas Steffen
  Install:
98 9 Andreas Steffen
Start-Date: 2017-07-07T14:02:23Z, eid = 17, epoch = 1849176721
99 9 Andreas Steffen
  Install:
100 9 Andreas Steffen
Start-Date: 2017-07-07T14:03:52Z, eid = 18, epoch = 1849176721
101 9 Andreas Steffen
  Install:
102 9 Andreas Steffen
  Upgrade:
103 9 Andreas Steffen
Start-Date: 2017-07-07T14:24:12Z, eid = 19, epoch = 1849176721
104 9 Andreas Steffen
  Install:
105 9 Andreas Steffen
Merging:
106 9 Andreas Steffen
  merged 1741 installed packages, 1741 registered in database
107 1 Andreas Steffen
</pre>
108 11 Andreas Steffen
109 11 Andreas Steffen
h2. Creating a Client Certificate
110 11 Andreas Steffen
111 22 Andreas Steffen
Using the strongSwan [[IpsecPki|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
112 11 Andreas Steffen
<pre>
113 11 Andreas Steffen
pki --gen --type ecdsa --size 256 --outform pem > client1_Key.pem
114 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
115 11 Andreas Steffen
</pre>
116 11 Andreas Steffen
117 11 Andreas Steffen
The PKCS#10 certificate request can now be signed by the CA
118 11 Andreas Steffen
<pre>
119 11 Andreas Steffen
 pki --issue --cakey caKey.pem --cacert caCert.pem --in client1_Req.pem --type pkcs10 --lifetime 1461 --outform pem > client1_Cert.pem
120 11 Andreas Steffen
</pre>
121 11 Andreas Steffen
122 11 Andreas Steffen
The certificate info can be displayed with
123 11 Andreas Steffen
<pre>
124 11 Andreas Steffen
pki --print --in client1_Cert.pem
125 11 Andreas Steffen
  subject:  "C=CZ, O=IETF, OU=SACM, CN=TNC Client 1"
126 11 Andreas Steffen
  issuer:   "C=CZ, O=IETF, OU=SACM, CN=IETF 99 Prague Hackathon CA"
127 11 Andreas Steffen
  validity:  not before Jul 07 22:58:17 2017, ok
128 11 Andreas Steffen
             not after  Jul 07 22:58:17 2021, ok (expires in 1460 days)
129 11 Andreas Steffen
  serial:    30:b7:f1:4b:e4:64:3a:5e
130 11 Andreas Steffen
  altNames:  client1.example.com
131 11 Andreas Steffen
  authkeyId: 81:44:64:84:26:5f:f6:08:80:4a:c9:77:32:0e:b2:78:d0:8f:e5:84
132 11 Andreas Steffen
  subjkeyId: 32:1f:29:04:6d:16:86:02:3f:c2:09:b9:4d:4d:82:de:95:92:ed:4d
133 11 Andreas Steffen
  pubkey:    ECDSA 256 bits
134 11 Andreas Steffen
  keyid:     f5:7b:fa:bd:ba:f9:72:91:33:91:0d:70:c5:90:36:12:30:1c:f3:25
135 11 Andreas Steffen
  subjkey:   32:1f:29:04:6d:16:86:02:3f:c2:09:b9:4d:4d:82:de:95:92:ed:4d
136 11 Andreas Steffen
</pre>
137 11 Andreas Steffen
138 11 Andreas Steffen
h2. Configuring the strongSwan "pt-tls-client" Tool
139 11 Andreas Steffen
140 22 Andreas Steffen
The [[PtTlsClient|pt-tls-client]] tool needs some configurations in */etc/strongswan.conf*
141 11 Andreas Steffen
<pre>
142 11 Andreas Steffen
pt-tls-client {
143 14 Andreas Steffen
  load = random nonce x509 revocation constraints openssl pkcs1 pkcs8 pem pubkey tnc-imc tnc-tnccs tnccs-20 curl sqlite
144 14 Andreas Steffen
145 11 Andreas Steffen
  plugins {
146 11 Andreas Steffen
    tnccs-20 {
147 11 Andreas Steffen
      max_batch_size = 131056
148 11 Andreas Steffen
      max_message_size = 131024
149 11 Andreas Steffen
    }
150 11 Andreas Steffen
  }
151 11 Andreas Steffen
}
152 13 Andreas Steffen
153 13 Andreas Steffen
libtls {
154 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
155 13 Andreas Steffen
}
156 13 Andreas Steffen
157 13 Andreas Steffen
libimcv {
158 13 Andreas Steffen
  plugins {
159 13 Andreas Steffen
    imc-os {
160 13 Andreas Steffen
      device_cert = /etc/pts/pki/client1_Cert.pem
161 13 Andreas Steffen
    }
162 13 Andreas Steffen
    imc-swima {
163 13 Andreas Steffen
      swid_full = yes
164 13 Andreas Steffen
      swid_database = sqlite:///etc/pts/collector.db
165 13 Andreas Steffen
    }
166 13 Andreas Steffen
  }
167 13 Andreas Steffen
}
168 13 Andreas Steffen
</pre>
169 13 Andreas Steffen
170 19 Andreas Steffen
The */etc/tnc_config* file defines which Integrity Measurement Collectors (IMCs) are loaded by the TNC client
171 13 Andreas Steffen
<pre>
172 13 Andreas Steffen
#IMC-Configuration
173 13 Andreas Steffen
IMC "OS"        /usr/lib/ipsec/imcvs/imc-os.so
174 13 Andreas Steffen
IMC "SWIMA"     /usr/lib/ipsec/imcvs/imc-swima.so
175 11 Andreas Steffen
</pre>
176 11 Andreas Steffen
177 1 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 */etc/pts/options*
178 18 Andreas Steffen
<pre>
179 11 Andreas Steffen
--connect tnc.example.com
180 11 Andreas Steffen
--cert /etc/pts/pki/caCert.pem
181 11 Andreas Steffen
--cert /etc/pts/pki/client1_Cert.pem
182 11 Andreas Steffen
--key /etc/pts/pki/client1_Key.pem
183 24 Andreas Steffen
--key-type ecdsa
184 11 Andreas Steffen
--debug 1
185 11 Andreas Steffen
</pre>
186 11 Andreas Steffen
187 21 Andreas Steffen
The SWIMA measurements on the endpoint are now transmitted using the simple command
188 11 Andreas Steffen
<pre>
189 11 Andreas Steffen
pt-tls-client --optionsfrom /etc/pts/options
190 11 Andreas Steffen
</pre>