Verbindung zur Datenbank per TLS verschlüsseln

Damit die Kommunikation vom APP Server zur Datenbank verschlüsselt ist, müssen folgende Schritte getan werden:

 

csr.cnf erstellen unter /etc/enginsight/ssl


[req]
default_bits = 4096
default_md = sha256
distinguished_name = req_dn
req_extensions = v3_req

[v3_req]
subjectKeyIdentifier = hash
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 =
IP.1 =

[req_dn]
countryName = DE
organizationName = Enginsight
commonName =

Folgende Kommandos ausführen, zum generieren des Zertifikates

if [ ! -f ./passwd ]
then
echo $(openssl rand -base64 16) > ./passwd
fi

passwd=$(cat ./passwd)

openssl genrsa -des3 -out mongodbCA.key -passout pass:$(echo ${passwd}) 4096

openssl req -x509 -new -nodes -key mongodbCA.key -sha256 -days 3650 -subj "/C=DE/ST=CA/O=Enginsight/CN=enginsight.com" -passin pass:$(echo ${passwd}) -out mongodbCA.crt

openssl genrsa -out mongodb.key -passout pass:$(echo ${passwd}) 2048

openssl req -new -sha256 -key mongodb.key -out mongodb.csr -config csr.cnf -subj "/C=DE/O=Enginsight/CN=enginsight.com"

openssl x509 -sha256 -req -days 3650 -passin pass:$(echo ${passwd}) -in mongodb.csr -CA mongodbCA.crt -CAkey mongodbCA.key -CAcreateserial -out mongodb.crt -extfile csr.cnf -extensions v3_req

cat mongodb.key mongodb.crt > mongodb.pem

Die Mongo Konfiguration anpassen

nano etc/mongod.conf

net:
  port: 27017
  bindIp: 0.0.0.0
 tls:
   mode: requireTLS
   certificateKeyFile: /etc/enginsight/ssl/mongodb.pem
   CAFile: /etc/enginsight/ssl/mongodbCA.crt

Service neu starten

sudo service mongodb restart

Öffnen der Mongo Shell nun mit

mongosh --tls --host  --tlsCAFile /etc/enginsight/ssl/mongodbCA.crt --tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem

 

Zertifikate übertragen:

Die Zertifikate, die unter /ect/enginsight/ssl angelegt wurden, müssen auf den App Server unter  /ect/enginsight/ssl kopiert werden, damit diese von Docker genutzt werden können.

 

Docker-Compose.yml anpassen

bei jedem Container muss zudem ein neues Volume gemountet werden:


volumes:
   - "./conf/ssl/:/etc/enginsight/ssl/"