Aller au contenu principal
Version: ⭐ 25.10

Sécuriser votre plateforme MBI

Ce chapitre décrit les procédures avancées pour sécuriser votre plateforme Centreon MBI.

Si vous souhaitez utiliser MBI avec une connexion à la base de données sécurisée, nous vous recommandons également de sécuriser votre plateforme Centreon. Suivez cette procédure si nécessaire.

Configurer TLS sur une base de données MySQL ou MariaDB​

Cette section décrit comment activer SSL entre Centreon MBI et un serveur MySQL ou MariaDB en utilisant la vérification par autorité de certification (mode VERIFY_CA / verify-ca).

Remarque : Cette procédure couvre uniquement le mode VERIFY_CA. Dans ce mode, le certificat du serveur est validé par rapport à une autorité de certification de confiance, mais le nom d'hôte/l'adresse IP n'est pas vérifié. Pour les autres modes de vérification SSL, consultez la section Référence des modes SSL.

  • Sélectionnez l'onglet correspondant à la base de données que vous souhaitez utiliser.

Étape 1 - Générer les clés et les certificats​

Si vous avez déjà généré des certificats (par exemple lors de la configuration de Centreon MAP), vous pouvez ignorer cette section et réutiliser le certificat CA existant.

1. Créez un répertoire (/etc/mysql/newcerts dans cet exemple) pour stocker vos fichiers de certificats :

mkdir -p /etc/mysql/newcerts
cd /etc/mysql/newcerts

2. Générez l'autorité de certification (CA). La CA est utilisée pour signer les certificats du serveur et du client, établissant ainsi une chaîne de confiance.

# Générer la clé privée de la CA
openssl genrsa 2048 > ca-key.pem
# Générer le certificat auto-signé de la CA
openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem

3. Générez le certificat du serveur. Le certificat du serveur est présenté par MySQL aux clients lors de la négociation SSL.

# Générer la clé privée du serveur et la CSR (Certificate Signing Request)
openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem

# Convertir la clé du serveur au format RSA (requis par MariaDB)
openssl rsa -in server-key.pem -out server-key.pem

# Signer le certificat du serveur avec la CA
openssl x509 -req -in server-req.pem -days 365000 \
-CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 \
-out server-cert.pem

4. Générez le certificat client (optionnel — mTLS uniquement). Le certificat client est utilisé par l'application pour s'authentifier auprès de MySQL. Ignorez cette section si vous n'avez besoin que de REQUIRE SSL.

# Générer la clé privée du client et la CSR
openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem

# Convertir la clé du client au format RSA
openssl rsa -in client-key.pem -out client-key.pem

# Signer le certificat client avec la CA
openssl x509 -req -in client-req.pem -days 365000 \
-CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 \
-out client-cert.pem

5. Vérifiez les certificats. Assurez-vous que les deux certificats sont correctement signés par la CA avant de continuer.

openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
# Résultat attendu :
# server-cert.pem: OK
# client-cert.pem: OK

6. Définissez les droits sur les fichiers.

chown -Rv mysql:mysql /etc/mysql/newcerts/*.pem
chmod 600 /etc/mysql/newcerts/server-key.pem /etc/mysql/newcerts/client-key.pem
chmod 644 /etc/mysql/newcerts/ca-cert.pem /etc/mysql/newcerts/server-cert.pem /etc/mysql/newcerts/client-cert.pem

Étape 2 - Configurer le serveur MySQL/MariaDB​

Si le serveur est déjà configuré pour SSL (par exemple pour Centreon MAP), ignorez cette section.

Assurez-vous d'utiliser le répertoire que vous avez précédemment créé (/etc/mysql/newcerts dans cet exemple).

1. Modifiez la configuration du serveur MySQL. Ajoutez le bloc suivant à votre fichier de configuration du serveur MySQL (généralement /etc/mysql/mysql.conf.d/mysqld.cnf) :

[mysqld]
ssl-ca=/etc/mysql/newcerts/ca-cert.pem
ssl-cert=/etc/mysql/newcerts/server-cert.pem
ssl-key=/etc/mysql/newcerts/server-key.pem
# Restreindre aux versions TLS sécurisées uniquement
tls_version=TLSv1.2,TLSv1.3

3. Vérifiez que SSL est actif.

SHOW VARIABLES LIKE '%ssl%';
-- have_ssl doit être YES
-- ssl_ca, ssl_cert, ssl_key doivent pointer vers vos fichiers de certificats

Étape 3 - Configurer l'utilisateur MySQL/MariaDB​

Centreon MBI utilise l'utilisateur centreonbi. Appliquez les exigences SSL à cet utilisateur pour chaque hôte concerné.

1. Exigez SSL pour l'utilisateur.

-- SSL uniquement (aucun certificat client requis)
ALTER USER 'centreonbi'@'<ip_or_hostname>' REQUIRE SSL;

-- Ou TLS mutuel (certificat client requis)
-- ALTER USER 'centreonbi'@'<ip_or_hostname>' REQUIRE X509;

-- Vérification : ssl_type doit maintenant afficher ANY (pour SSL) ou X509 (pour mTLS)
SELECT user, host, ssl_type FROM mysql.user WHERE user='centreonbi';

2. Accordez les privilèges.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
CREATE TEMPORARY TABLES, LOCK TABLES
ON `centreon`.*
TO `centreonbi`@`<ip_or_hostname>`;

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
CREATE TEMPORARY TABLES, LOCK TABLES
ON `centreon_storage`.*
TO `centreonbi`@`<ip_or_hostname>`;

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
CREATE TEMPORARY TABLES, LOCK TABLES
ON `centreon_mbi`.*
TO `centreonbi`@`<ip_or_hostname>`;

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
CREATE TEMPORARY TABLES, LOCK TABLES
ON `centreon_storage_mbi`.*
TO `centreonbi`@`<ip_or_hostname>`;

Étape 4 - Configurer JDBC (Centreon MBI / BIRT)​

Centreon MBI utilise MySQL Connector/J (com.mysql.cj.jdbc.Driver), qui ne prend pas en charge les fichiers PEM directement. Les certificats doivent être stockés dans un Java KeyStore (JKS ou PKCS12).

FichierContenuRôleRequis
truststore.jksCertificat CAPermet à Java de vérifier l'identité du serveur de base de données✓ Toujours
keystore.jksCertificat client + clé privéePermet à la base de données de vérifier l'identité de l'applicationSeulement si REQUIRE X509

Remarque : le mTLS est optionnel. Il n'est nécessaire que si l'utilisateur MySQL a été créé avec REQUIRE X509. Si l'utilisateur a été créé avec REQUIRE SSL, seul le TrustStore est requis.

1. Créez le TrustStore. Le TrustStore contient le certificat CA. Java l'utilise pour valider que le certificat du serveur MySQL a été signé par une autorité de confiance.

keytool -importcert -alias mysqlServerCACert \
-file /etc/mysql/newcerts/ca-cert.pem \
-keystore /etc/mysql/newcerts/truststore.jks \
-storepass changeit \
-noprompt

2. Créez le KeyStore (optionnel — mTLS uniquement). Ignorez cette étape si l'utilisateur centreonbi a été créé avec REQUIRE SSL.

2.1 Regroupez le certificat et la clé client dans un fichier PKCS12 :

openssl pkcs12 -export \
-in /etc/mysql/newcerts/client-cert.pem \
-inkey /etc/mysql/newcerts/client-key.pem \
-out /etc/mysql/newcerts/client.p12 \
-name mbiClient \
-passout pass:changeit

2.2 Convertissez le PKCS12 en JKS :

keytool -importkeystore \
-srckeystore /etc/mysql/newcerts/client.p12 -srcstoretype PKCS12 -srcstorepass changeit \
-destkeystore /etc/mysql/newcerts/keystore.jks -deststoretype JKS -deststorepass changeit

3. Définissez les permissions sur les fichiers.

chown centreon-bi: /etc/mysql/newcerts/*.jks
chmod 640 /etc/mysql/newcerts/*.jks

4. Mettez à jour les fichiers de profil XML BIRT.

Important — encodage XML : Dans les valeurs d'attributs XML, le séparateur & entre les paramètres d'URL doit être écrit sous la forme &amp;. Ne pas le faire provoquera une erreur d'analyse XML et empêchera MBI de démarrer.

Deux fichiers doivent être mis à jour, chacun contenant deux profils.

/etc/cbis-conf/cbis-profile.xml

Profil Centreon (base de données centreon) :

<property name="odaURL" value="jdbc:mysql://<ip_or_hostname>:3306/centreon?autoReconnect=true&amp;sslMode=VERIFY_CA&amp;trustCertificateKeyStoreUrl=file:/etc/mysql/newcerts/truststore.jks&amp;trustCertificateKeyStorePassword=changeit"/>

Profil Censtorage (base de données centreon_storage) :

<property name="odaURL" value="jdbc:mysql://<ip_or_hostname>:3306/centreon_storage?autoReconnect=true&amp;sslMode=VERIFY_CA&amp;trustCertificateKeyStoreUrl=file:/etc/mysql/newcerts/truststore.jks&amp;trustCertificateKeyStorePassword=changeit"/>

/etc/cbis-conf/reports-profile.xml

Profil Centreon (base de données centreon_mbi) :

<property name="odaURL" value="jdbc:mysql://<ip_or_hostname>:3306/centreon_mbi?autoReconnect=true&amp;sslMode=VERIFY_CA&amp;trustCertificateKeyStoreUrl=file:/etc/mysql/newcerts/truststore.jks&amp;trustCertificateKeyStorePassword=changeit"/>

Profil Censtorage (base de données centreon_storage_mbi) :

<property name="odaURL" value="jdbc:mysql://<ip_or_hostname>:3306/centreon_storage_mbi?autoReconnect=true&amp;sslMode=VERIFY_CA&amp;trustCertificateKeyStoreUrl=file:/etc/mysql/newcerts/truststore.jks&amp;trustCertificateKeyStorePassword=changeit"/>

Optionnel — mTLS (REQUIRE X509) : ajoutez les paramètres KeyStore à chaque URL :

<property name="odaURL" value="jdbc:mysql://<ip_or_hostname>:3306/centreon?autoReconnect=true&amp;sslMode=VERIFY_CA&amp;trustCertificateKeyStoreUrl=file:/etc/mysql/newcerts/truststore.jks&amp;trustCertificateKeyStorePassword=changeit&amp;clientCertificateKeyStoreUrl=file:/etc/mysql/newcerts/keystore.jks&amp;clientCertificateKeyStorePassword=changeit"/>

Appliquez le même modèle aux trois autres profils.

Étape 5 - Redémarrer Centreon MBI​

systemctl restart cbis

Étape 6 - Vérifier l'expiration des certificats​

TrustStore (certificat CA) :

keytool -list -v -keystore /etc/mysql/newcerts/truststore.jks -storepass changeit
# Recherchez : Valid from ... until ...

KeyStore (certificat client, mTLS uniquement) :

keytool -list -v -keystore /etc/mysql/newcerts/keystore.jks -storepass changeit
# Recherchez : Valid from ... until ...

Certificat CA (PEM) :

openssl x509 -in /etc/mysql/newcerts/ca-cert.pem -noout -dates

Référence des modes SSL​

Le mode VERIFY_CA est le minimum recommandé pour la production. Ce tableau répertorie les autres modes disponibles selon vos exigences de sécurité :

ModeCertificat serveur vérifiéNom d'hôte/IP vérifiéCas d'usage
DISABLEDNonNonDéveloppement uniquement — pas de chiffrement
PREFERREDNonNonUtilise SSL si disponible, repli sur connexion non chiffrée
REQUIREDNonNonImpose SSL, mais ne valide pas le certificat du serveur
VERIFY_CAOuiNonUtilisé dans cette procédure — valide la chaîne CA
VERIFY_IDENTITYOuiOuiLe plus strict — vérifie également le nom d'hôte/IP par rapport au SAN du certificat

Remarque : Si vous souhaitez utiliser le mode VERIFY_IDENTITY, le certificat du serveur doit inclure un Subject Alternative Name (SAN) correspondant exactement à l'IP ou au nom d'hôte utilisé dans l'URL JDBC.