blob: 2d7b00714eaeb5af4ffe45561e3620be6c5ae0ad [file] [log] [blame]
Vijay VK2648c6d2018-09-19 04:30:37 +01001.. This work is licensed under a Creative Commons Attribution 4.0 International License.
2.. http://creativecommons.org/licenses/by/4.0
3
4TLS Support
5===========
6
Jack Lucas7c6b15d2018-10-30 12:25:02 -04007To comply with ONAP security requirement, all services exposing external API required TLS support using AAF generated certificates. DCAE Platform was updated in R3 to enable certificate distribution mechanism for services needing TLS support.
Vijay VK2648c6d2018-09-19 04:30:37 +01008
9Solution overview
10-----------------
111. Certificate generation:
Jack Lucas7c6b15d2018-10-30 12:25:02 -040012 This step is done manually currently using Test AAF instance in POD25. Required namespace, DCAE identity (dcae@dcae.onap.org), roles and Subject Alternative Names for all components are preset. Using the procedure desribed by AAF (using ``agent.sh``), the certificates are generated. Using the Java keystore file (``.jks``) generated from AAF, create the .pem files and load them into tls-init-container under dcaegen2/deployment repository. The image has a script that runs when the image is deployed. The script copies the certificate artifacts into a Kubernetes volume. The container is used as an "init-container" included in the Kubernetes pod for a component that needs to use TLS.
Vijay VK2648c6d2018-09-19 04:30:37 +010013
142. Plugin and Blueprint:
Jack Lucas7c6b15d2018-10-30 12:25:02 -040015 Update blueprint to include new (optional) node property (tls_info) to the type definitions for the Kubernetes component types. The property is a dictionary with two elements:
16
17 * A boolean (``use_tls``) that indicates whether the component uses TLS.
18 * A string (``cert_directory``) that indicates where the component expects to find certificate artifacts.
Vijay VK2648c6d2018-09-19 04:30:37 +010019
Vijay VKf6659fc2018-11-02 05:07:27 +010020 Example
21.. code-block:: yaml
22
23 tls_info:
24 cert_directory: '/opt/app/dh/etc/cert/'
25 use_tls: true
26
27For this example the certificates are mounted into /opt/app/dh/etc/cert directory within the conainer.
28
29
Jack Lucas7c6b15d2018-10-30 12:25:02 -040030 During deployment Kubernetes plugin (referenced in blueprint) will check if the ``tls_info`` property is set and ``use_tls`` is set to true, then the plugin will add some elements to the Kubernetes Deployment for the component:
31 * A Kubernetes volume (``tls-info``) that will hold the certificate artifacts
32 * A Kubernetes initContainer (``tls-init``)
33 * A Kubernetes volumeMount for the initContainer that mounts the ``tls-info`` volume at ``/opt/tls/shared``.
34 * A Kubernetes volumeMount for the main container that mounts the ``tls-info`` volume at the mount point specified in the ``cert_directory`` property.
Vijay VK2648c6d2018-09-19 04:30:37 +010035
363. Certificate Artifacts
37
Jack Lucas7c6b15d2018-10-30 12:25:02 -040038 The certificate directory mounted on the container will include the following files:
39 * ``cert.jks``: A Java keystore containing the DCAE certificate.
40 * ``jks.pass``: A text file with a single line that contains the password for the ``cert.jks`` keystore.
41 * ``trust.jks``: A Java truststore containing the AAF CA certificate. (Needed by clients that access TLS-protected servers.)
42 * ``trust.pass``: A text file with a single line that contains the password for the ``trust.jks`` keystore.
43 * ``cert.p12``: The DCAE certificate and private key packaged in PKCS12 form.
44 * ``p12.pass``: A text file with a single line that contains the password for ``cert.p12`` file.
45 * ``cert.pem``: The DCAE certificate concatenated with the intermediate CA certficate from AAF, in PEM form.
46 * ``key.pem``: The private key for the DCAE certificate. The key is not encrypted.
47 * ``cacert.pem``: The AAF CA certificate, in PEM form. (Needed by clients that access TLS-protected servers.)