blob: fc75d11b9d6476c3125fb0ca668f5e56d4ee6014 [file] [log] [blame]
Bogumil Zebek483ccbf2020-03-25 11:54:11 +01001.. This work is licensed under a Creative Commons Attribution 4.0 International License.
2.. http://creativecommons.org/licenses/by/4.0
3.. Copyright 2020 NOKIA
4
5Configuration
6=============
7
Bogumil Zebek483ccbf2020-03-25 11:54:11 +01008
Adam Wudzinski2e83d542020-04-21 19:28:37 +02009Configuring Cert Service
10------------------------
11Cert Service keeps configuration of CMP Servers in file *cmpServers.json*.
12
13Example cmpServers.json file:
14
15.. code-block:: json
16
17 {
18 "cmpv2Servers": [
19 {
20 "caName": "Client",
21 "url": "http://aafcert-ejbca:8080/ejbca/publicweb/cmp/cmp",
22 "issuerDN": "CN=ManagementCA",
23 "caMode": "CLIENT",
24 "authentication": {
25 "iak": "mypassword",
26 "rv": "mypassword"
27 }
28 },
29 {
30 "caName": "RA",
31 "url": "http://aafcert-ejbca:8080/ejbca/publicweb/cmp/cmpRA",
32 "issuerDN": "CN=ManagementCA",
33 "caMode": "RA",
34 "authentication": {
35 "iak": "mypassword",
36 "rv": "mypassword"
37 }
38 }
39 ]
40 }
41
42This contains list of CMP Servers, where each server has following properties:
43
Adam Wudzinskia9657f02020-04-23 13:39:45 +020044 - *caName* - name of the external CA server. It's used to match *CA_NAME* sent by client in order to match proper configuration.
45 - *url* - URL to CMPv2 server
Adam Wudzinski2e83d542020-04-21 19:28:37 +020046 - *issuerDN* - Distinguished Name of the CA that will sign the certificate
Adam Wudzinskia9657f02020-04-23 13:39:45 +020047 - *caMode* - Issuer mode. Allowed values are *CLIENT* and *RA*
Adam Wudzinski2e83d542020-04-21 19:28:37 +020048 - *authentication*
49
50 - *iak* - Initial authentication key, used to authenticate request in CMPv2 server
Adam Wudzinskia9657f02020-04-23 13:39:45 +020051 - *rv* - Reference value, used to authenticate request in CMPv2 server
Adam Wudzinski2e83d542020-04-21 19:28:37 +020052
53
54
Adam Wudzinskia9657f02020-04-23 13:39:45 +020055This configuration is read on the application start. It can also be reloaded in runtime, by calling HTTPS endpoint.
56
57Next sections explain how to configure Cert Service in local (docker-compose) and OOM Deployments.
Adam Wudzinski2e83d542020-04-21 19:28:37 +020058
59
60Configuring in local(docker-compose) deployment:
61^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
62
Adam Wudzinskia9657f02020-04-23 13:39:45 +020063Before application start:
64"""""""""""""""""""""""""
Adam Wudzinski2e83d542020-04-21 19:28:37 +020065
661. Edit *cmpServers.json* file in certservice/compose-resources
672. Start containers::
68
69 make start-backend
70
Adam Wudzinskia9657f02020-04-23 13:39:45 +020071When application is running:
72""""""""""""""""""""""""""""
Adam Wudzinski2e83d542020-04-21 19:28:37 +020073
741. Find CertService docker container name.
752. Enter container::
76
77 docker exec -it <certservice-container-name> bash
78
793. Edit *cmpServers.json* file::
80
81 vim /etc/onap/aaf/certservice/cmpServers.json
82
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200834. Save the file. Note that this file is mounted as volume, so change will be persistent.
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200845. Reload configuration::
85
86 curl -I https://localhost:8443/reload --cacert /etc/onap/aaf/certservice/certs/root.crt --cert-type p12 --cert /etc/onap/aaf/certservice/certs/certServiceServer-keystore.p12 --pass secret
87
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200886. Exit container::
89
90 exit
91
Adam Wudzinski2e83d542020-04-21 19:28:37 +020092
93Configuring in OOM deployment:
Adam Wudzinskia9657f02020-04-23 13:39:45 +020094^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Adam Wudzinski2e83d542020-04-21 19:28:37 +020095
Adam Wudzinskia9657f02020-04-23 13:39:45 +020096Before OOM installation:
97""""""""""""""""""""""""
Adam Wudzinski2e83d542020-04-21 19:28:37 +020098
Adam Wudzinskia9657f02020-04-23 13:39:45 +020099Note! This must be executed before calling *make all* (from OOM Installation) or needs remaking aaf Charts.
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200100
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200101
Adam Wudzinskia9657f02020-04-23 13:39:45 +02001021. Edit *cmpServers.json* file. If OOM *global.addTestingComponents* flag is set to:
103
104 - *true* - edit *kubernetes/aaf/charts/aaf-cert-service/resources/test/cmpServers.json*
105 - *false* - edit *kubernetes/aaf/charts/aaf-cert-service/resources/default/cmpServers.json*
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200106
1072. Build and start OOM deployment
108
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200109When CertService is deployed:
110"""""""""""""""""""""""""""""
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200111
Adam Wudzinskia9657f02020-04-23 13:39:45 +02001121. Encode your configuration to base64::
113
114 echo "CONFIGURATION_TO_ENCODE" | base64
115
Adam Wudzinski2e83d542020-04-21 19:28:37 +02001162. Edit secret::
117
118 kubectl edit secret <cmp-servers-secret-name> # aaf-cert-service-secret by default
119
1203. Replace value for *cmpServers.json* with your base64 encoded configuration. For example:
121
122 .. code-block:: yaml
123
124 apiVersion: v1
125 data:
126 cmpServers.json: <HERE_PLACE_YOUR_BASE64_ENCODED_CONFIG>
127 kind: Secret
128 metadata:
129 creationTimestamp: "2020-04-21T16:30:29Z"
130 name: aaf-cert-service-secret
131 namespace: default
132 resourceVersion: "33892990"
133 selfLink: /api/v1/namespaces/default/secrets/aaf-cert-service-secret
134 uid: 6a037526-83ed-11ea-b731-fa163e2144f6
135 type: Opaque
136
1374. Save and exit
Adam Wudzinskia9657f02020-04-23 13:39:45 +02001385. New configuration will be automatically mounted to CertService pod, but application configuration reload is needed.
1396. To reload configuration enter CertService pod::
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200140
141 kubectl exec -it <cert-service-pod-name> bash
142
1437. Reload configuration::
144
145 curl -I https://localhost:$HTTPS_PORT/reload --cacert $ROOT_CERT --cert-type p12 --cert $KEYSTORE_P12_PATH --pass $KEYSTORE_PASSWORD
146
Adam Wudzinskia9657f02020-04-23 13:39:45 +02001478. Exit container::
148
149 exit
150
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200151
Adam Wudzinskie59bd6b2020-04-22 11:24:24 +0200152Generating certificates for CertService and CertService Client
153--------------------------------------------------------------
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200154CertService and CertService client use mutual TLS for communication. Certificates are generated during CertService installation.
Adam Wudzinskie59bd6b2020-04-22 11:24:24 +0200155
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200156Docker mode:
Adam Wudzinskie59bd6b2020-04-22 11:24:24 +0200157^^^^^^
158
159Certificates are mounted to containers by docker volumes:
160
161 - CertService volumes are defined in certservice/docker-compose.yaml
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200162 - CertService Client volumes are defined in certservice/Makefile
Adam Wudzinskie59bd6b2020-04-22 11:24:24 +0200163
164All certificates are stored in *certservice/certs* directory. To recreate certificates go to *certservice/certs* directory and execute::
165
166 make clear all
167
168This will clear existing certs and generate new ones.
169
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200170ONAP OOM installation:
Adam Wudzinskie59bd6b2020-04-22 11:24:24 +0200171^^^^
172
173Certificates are stored in secrets, which are mounted to pods as volumes. Both secrets are stored in *kubernetes/aaf/charts/aaf-cert-service/templates/secret.yaml*.
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200174Secrets take certificates from *kubernetes/aaf/charts/aaf-cert-service/resources* directory. Certificates are generated automatically during building (using Make) OOM repository.
Adam Wudzinskie59bd6b2020-04-22 11:24:24 +0200175
176*kubernetes/aaf/charts/aaf-cert-service/Makefile* is similar to the one stored in certservice repository. It actually generates certificates.
177This Makefile is executed by *kubernetes/aaf/Makefile*, which is automatically executed during OOM build.
178
179
Adam Wudzinskia9657f02020-04-23 13:39:45 +0200180Using external certificates for CertService and CertService Client
181------------------------------------------------------------------
182
183This section describes how to use custom, external certificates for CertService and CertService Client communication in OOM installation.
184
1851. Set *tls.certificateExternalSecret* flag to true in *kubernetes/aaf/charts/aaf-cert-service/values.yaml*
1862. Prepare secret for CertService. It must be provided before OOM installation. It must contain four files:
187
188 - *certServiceServer-keystore.jks* - keystore in jks format. Signed by some Root CA
189 - *certServiceServer-keystore.p12* - same keystore in p12 format
190 - *truststore.jks* - truststore in jks format, containing certificates of the Root CA that signed CertService Client certificate
191 - *root.crt* - certificate of the RootCA that signed Client certificate in crt format
192
1933. Name the secret properly - the name should match *tls.server.secret.name* value from *kubernetes/aaf/charts/aaf-cert-service/values.yaml* file
194
1954. Prepare secret for CertService Client. It must be provided before OOM installation. It must contain two files:
196
197 - *certServiceClient-keystore.jks* - keystore in jks format. Signed by some Root CA
198 - *truststore.jks* - truststore in jks format, containing certificates of the RootCA that signed CertService certificate
199
2005. Name the secret properly - the name should match *global.aaf.certService.client.secret.name*
201
2026. Provide keystore and truststore passwords for CertService. It can be done in two ways:
203
204 - by inlining them into *kubernetes/aaf/charts/aaf-cert-service/values.yaml*:
205
206 - override *credentials.tls.keystorePassword* value with keystore password
207 - override *credentials.tls.truststorePassword* value with truststore password
208
209 - or by providing them as secrets:
210
211 - uncomment *credentials.tls.keystorePasswordExternalSecret* value and provide keystore password
212 - uncomment *credentials.tls.truststorePasswordExternalSecret* value and provide truststore password
213
2147. Override default keystore and truststore passwords for CertService Client in *kubernetes/onap/values.yaml* file:
215
216 - override *global.aaf.certServiceClient.envVariables.keystorePassword* value with keystore password
217 - override *global.aaf.certServiceClient.envVariables.truststorePassword* value with truststore password
218
219
egernug56f09f32020-03-31 11:28:11 +0100220Configuring EJBCA server for testing
221------------------------------------
222
223To instantiate an EJBCA server for testing purposes with an OOM deployment, cmpv2Enabled and cmpv2Testing have to be changed to true in oom/kubernetes/aaf/values.yaml.
224
225cmpv2Enabled has to be true to enable aaf-cert-service to be instantiated and used with an external Certificate Authority to get certificates for secure communication.
226
227If cmpv2Testing is enabled then an EJBCA test server will be instantiated in the OOM deployment as well, and will come pre-configured with a test CA to request a certificate from.
228
229Currently the recommended mode is single-layer RA mode.
230
231
232Default Values:
233
234+---------------------+---------------------------------------------------------------------------------------------------------------------------------+
235| Name | Value |
236+=====================+=================================================================================================================================+
Adam Wudzinski2e83d542020-04-21 19:28:37 +0200237| Request URL | http://aaf-ejbca:8080/ejbca/publicweb/cmp/cmpRA |
egernug56f09f32020-03-31 11:28:11 +0100238+---------------------+---------------------------------------------------------------------------------------------------------------------------------+
239| Response Type | PKI Response |
240+---------------------+---------------------------------------------------------------------------------------------------------------------------------+
241| caMode | RA |
242+---------------------+---------------------------------------------------------------------------------------------------------------------------------+
243| alias | cmpRA |
244+---------------------+---------------------------------------------------------------------------------------------------------------------------------+
245
246
247If you wish to configure the EJBCA server, you can find Documentation for EJBCA here: https://doc.primekey.com/ejbca/
248
249If you want to understand how CMP works on EJBCA in more detail, you can find Details here: https://download.primekey.com/docs/EJBCA-Enterprise/6_14_0/CMP.html
Bogumil Zebek483ccbf2020-03-25 11:54:11 +0100250