Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This page contains information about the default certs in A1 Policy Management Service and how to update/replace them using dockerDocker and Kubernetes.

...

General

The A1 Policy Management Service and the Enrichment Coordinator Service has a default keystore keystores and truststore truststores that are built into the containercontainers. The paths and passwords for these stores are located in a yaml file:
            nonrtric/policy-agent/ config/application.yaml

The default truststore trust store includes a1simulator cert as a trusted cert which is located here:
https://gerrit.o-ran-sc.org/r/gitweb?p=sim/a1-interface.git;a=tree;f=near-rt-ric-simulator/certificate;h=172c1e5aacd52d760e4416288dc5648a5817ce65;hb=HEAD

The default truststore trust store also includes a1controller cert as a trusted cert which is located here (keystore.jks file):
https://gerrit.o-ran-sc.org/r/gitweb?p=nonrtric.git;a=tree;f=sdnc-a1-controller/oam/installation/sdnc-a1/src/main/resources;h=17fdf6cecc7a866c5ce10a35672b742a9f0c4acf;hb=HEAD

By default, trust validation is not enabled (which means that a peer with any cert can connect/be connected to the componentsThere is also A1 Policy Management Service's own cert in the default truststore for mocking purposes and unit-testing (ApplicationTest.java).

A1 Policy Management Service, configuration of SSL in Kubernetes

The keystore and truststore can be configured in Kubernetes.  In the source code repository, the default files are located.  Updating this in a running cluster can be done in more than one way, but this is probably the simplest.
First you need to create a directory with three files.

config/
  application.yaml
  keystore.jks
  truststore.jks

The default application.yaml can be taken from the source code repository or by using command "kubectl describe configmap policymanagementservice-configmap -n nonrtric"
Then you need to create the keystore.jks and (if used, this is not used by default) a truststore.jks .
There is a README file in the source code repository that describes how the default keystore and truststore are created. This involves creating a CA cert used for signing.

If you are happy with just a self signed cert, it can be created using the keytool command. Example:
>keytool

Code Block
languagebash
keytool -genkeypair -alias policy_agent -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 3650 -storepass <key store password>

The following parameters in the application.yaml needs to be updated (the non relevant parameters for this are omitted):
...

server:
  ssl:
    key-store-type: JKS
    key-store-password: <key password>
    key-store: /opt/app/policy-agent/config/keystore.jks   ---- Note that the path needs to be updated to this
    key-password: <key store password>
    key-alias: <key alias>policy_agent
# Add the following 2 parameters if you want to enable trust validation for accesses towards the service (mainly the service NBI).
    trust-store-password: <trust store password>
    trust-store: /opt/app/policy-agent/config/truststore.jks
app:
  webclient:
  # – Update the following parameters if you want to enable trust validation in the accesses connections from the service towards the RAN
    trust-store-used: true  
    trust-store-password: <trust store password>
    trust-store: /opt/app/policy-agent/config/truststore.jks
...

When this is done you can update the config map that holds the configuration for the service:>kubectl create configmap 

Code Block
languagebash
kubectl create configmap  policymanagementservice-configmap-config --from-file=./config --dry-run=client -n nonrtric -o yaml |

...

 kubectl apply -f -

The three files file be placed in the configuration directory for the service. A POD restart is needed for the changes to take effect.

Enrichment Coordinator Service, configuration of SSL in Kubernetes

Configuration of the SSL for the ECS is done in the same was as for the A1 Policy Management Service (see above). There are two differences:

  1. The name of the configmap config map is enrichmentservice-configmap.
  2. The file paths for the config directory for this component (where the configmap config map is mounted) is /opt/app/enrichment-coordinator-service/config.

...

The command for updating the config map will then beis:>kubectl create configmap 

Code Block
languagebash
kubectl create configmap  enrichmentservice-configmap --from-file=./config --dry-run=client -n nonrtric -o yaml |

...

 kubectl apply -f -

A1 Policy Management Service, configuration of SSL in Docker

The default keystore, truststore, and application.yaml files can be overridden by mounting new files using the "volumes" field of docker-compose or docker run command.

...

docker run -p 8081:8081 -p 8433:8433 --name=policy-agent-container --network=nonrtric-docker-net --volume "$PWD/new_keystore.jks:/opt/app/policy-agent/etc/cert/keystore.jks" --volume "$PWD/new_truststore.jks:/opt/app/policy-agent/etc/cert/truststore.jks" --volume "$PWD/new_application.yaml:/opt/app/policy-agent/config/application.yaml" o-ran-sc/nonrtric-policy-agent:2.02.0-SNAPSHOT