Dans le cadre de la documentation associée à ce produit, nous nous efforçons d’utiliser un langage exempt de préjugés. Dans cet ensemble de documents, le langage exempt de discrimination renvoie à une langue qui exclut la discrimination en fonction de l’âge, des handicaps, du genre, de l’appartenance raciale de l’identité ethnique, de l’orientation sexuelle, de la situation socio-économique et de l’intersectionnalité. Des exceptions peuvent s’appliquer dans les documents si le langage est codé en dur dans les interfaces utilisateurs du produit logiciel, si le langage utilisé est basé sur la documentation RFP ou si le langage utilisé provient d’un produit tiers référencé. Découvrez comment Cisco utilise le langage inclusif.
Cisco a traduit ce document en traduction automatisée vérifiée par une personne dans le cadre d’un service mondial permettant à nos utilisateurs d’obtenir le contenu d’assistance dans leur propre langue. Il convient cependant de noter que même la meilleure traduction automatisée ne sera pas aussi précise que celle fournie par un traducteur professionnel.
Ce document décrit le renouvellement du certificat de l'autorité de certification (CA) sftunnel du Centre de gestion Firepower (FMC) en relation avec la connectivité FTD (Firepower Threat Defense).
Cisco vous recommande de prendre connaissance des rubriques suivantes :
Ce document n'est pas limité à des versions de matériel et de logiciel spécifiques.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.
FMC et FTD communiquent entre eux via sftunnel (tunnel Sourcefire). Cette communication utilise des certificats pour sécuriser la conversation sur une session TLS. Plus d'informations sur le sftunnel et comment il s'établit peuvent être trouvées sur ce lien.
À partir de la capture de paquets, vous pouvez voir que le FMC (10.48.79.232 dans cet exemple) et le FTD (10.48.79.23) échangent des certificats entre eux. Ils le font afin de valider qu'ils parlent avec le bon appareil et qu'il n'y a pas d'écoute électronique ou d'attaque Man-In-The-Middle (MITM). La communication est chiffrée à l'aide de ces certificats et seule la partie qui a la clé privée associée pour ce certificat est en mesure de le déchiffrer à nouveau.
Vous pouvez voir que les certificats sont signés par la même autorité de certification (CA) interne (émetteur) qui est configurée sur le système FMC. La configuration est définie sur le FMC sur le fichier /etc/sf/sftunnel.conf qui contient quelque chose comme :
proxyssl {
proxy_cert /etc/sf/keys/sftunnel-cert.pem; ---> Certificate provided by FMC to FTD for the sftunnel communication (signed by InternalCA)
proxy_key /etc/sf/keys/sftunnel-key.pem;
proxy_cacert /etc/sf/ca_root/cacert.pem; ---> CA certificate (InternalCA)
proxy_crl /etc/sf/ca_root/crl.pem;
proxy_cipher 1;
proxy_tls_version TLSv1.2;
};
Indique l’autorité de certification utilisée pour signer tous les certificats pour sftunnel (à la fois le FTD et le FMC) et le certificat utilisé par le FMC pour envoyer à tous les FTD. Ce certificat est signé par l'autorité de certification interne.
Lorsque le FTD s'enregistre auprès du FMC, le FMC crée également un certificat à transmettre au périphérique FTD qui est utilisé pour la communication ultérieure sur le sftunnel. Ce certificat est également signé par le même certificat CA interne. Sur FMC, vous pouvez trouver ce certificat (et la clé privée) sous /var/sf/peers/<UUID-FTD-device> et potentiellement sous le dossier certs_push et est appelé sftunnel-cert.pem (sftunnel-key.pem pour la clé privée). Sur FTD, vous pouvez trouver ceux sous /var/sf/peers/<UUID-FMC-device> avec la même convention d'attribution de noms.
Cependant, chaque certificat a également une période de validité à des fins de sécurité. Lors de l'inspection du certificat InternalCA, nous pouvons également voir la période de validité qui est de 10 ans pour le FMC InternalCA comme indiqué dans la capture de paquets.
Le certificat FMC InternalCA n'est valide que pour 10 ans. Après le délai d'expiration, le système distant ne fait plus confiance à ce certificat (ainsi qu'aux certificats signés par lui) et cela entraîne des problèmes de communication sftunnel entre les périphériques FTD et FMC. Cela signifie également que plusieurs fonctionnalités clés telles que les événements de connexion, les recherches de programmes malveillants, les règles basées sur l'identité, les déploiements de politiques et bien d'autres choses ne fonctionnent pas.
Les périphériques s'affichent comme désactivés sur l'interface utilisateur FMC sous l'onglet Périphériques > Gestion des périphériques lorsque le sftunnel n'est pas connecté. Le problème lié à cette expiration est suivi sur l'ID de bogue Cisco CSCwd08098. Notez bien que tous les systèmes sont affectés, même lorsque vous exécutez une version fixe du défaut. Vous trouverez plus d'informations sur ce correctif dans la section Solution.
Le FMC n’actualise pas automatiquement l’autorité de certification et ne republie pas les certificats sur les périphériques FTD. Et il n'y a pas non plus d'alerte d'intégrité FMC qui indique que le certificat expire. L'ID de bogue Cisco CSCwd08448 est suivi à cet égard pour fournir une alerte de santé sur l'interface utilisateur FMC à l'avenir.
Au départ, rien ne se passe et les canaux de communication sftunnel continuent à fonctionner comme avant. Cependant, lorsque la communication sftunnel entre les périphériques FMC et FTD est interrompue et qu'il tente de rétablir la connexion, elle échoue et vous pouvez observer des lignes de journal sur le fichier journal des messages qui pointent vers l'expiration du certificat.
Lignes de journal du périphérique FTD de /ngfw/var/log/messages :
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [INFO] Initiating IPv4 connection to 10.10.200.31:8305/tcp
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [INFO] Wait to connect to 8305 (IPv4): 10.10.200.31
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [INFO] Connected to 10.10.200.31 from resolved_ip_list (port 8305) (IPv4)
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [ERROR] -Error with certificate at depth: 1
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [ERROR] issuer = /title=InternalCA/OU=Intrusion Management System/CN=06f5f3ca-c77b-11e2-81bf-884d9d11f3ef/O=Sourcefire, Inc.
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [ERROR] subject = /title=InternalCA/OU=Intrusion Management System/CN=06f5f3ca-c77b-11e2-81bf-884d9d11f3ef/O=Sourcefire, Inc.
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [ERROR] err 10:certificate has expired
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [ERROR] SSL_renegotiate error: 1: error:00000001:lib(0):func(0):reason(1)
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [ERROR] Connect:SSL handshake failed
Sep 20 04:10:47 FTD-hostname SF-IMS[50792]: [51982] sftunneld:sf_ssl [WARN] SSL Verification status: certificate has expired
Lignes de journal du périphérique FMC à partir de /var/log/messages :
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [INFO] VERIFY ssl_verify_callback_initial ok=1!
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [ERROR] SSL_renegotiate error: 1: error:00000001:lib(0):func(0):reason(1)
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [WARN] establishConnectionUtil: SSL handshake failed
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [WARN] establishConnectionUtil: SSL Verification status: ok
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [WARN] establishConnectionUtil: SSL handshake failed: error:14094415:SSL routines:ssl3_read_bytes:sslv3 alert certificate expired
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [INFO] establishConnectionUtil: Failed to connect using SSL to: '10.10.21.10'
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [ERROR] establishSSLConnection: Unable to connect with both threads:
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [ERROR] establishSSLConnection: ret_accept status : Too many levels of symbolic links
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [ERROR] establishSSLConnection: iret_connect status: Too many levels of symbolic links
Sep 20 03:14:23 FMC-hostname SF-IMS[1504]: [4171] sftunneld:sf_ssl [ERROR] establishSSLConnection: Failed connecting with SSL to using to: '10.10.21.10' rval[40] *CA cert from FMC
La communication sftunnel peut être interrompue pour diverses raisons :
Étant donné le grand nombre de possibilités qui peuvent interrompre la communication sftunnel, il est fortement conseillé de corriger la situation le plus rapidement possible, même lorsque tous les périphériques FTD sont actuellement correctement connectés malgré l'expiration du certificat.
Le plus simple est d’exécuter ces commandes sur la session FMC SSH :
expert
sudo su
cd /etc/sf/ca_root
openssl x509 -dates -noout -in cacert.pem
Vous voyez ainsi les éléments Validité du certificat. La partie principale pertinente ici est le "notAfter" qui montre que le certificat ici est valable jusqu'au 5 octobre 2034.
Si vous préférez exécuter une seule commande qui vous donne immédiatement le nombre de jours pendant lesquels le certificat est toujours valide, vous pouvez utiliser ceci :
CERT_PATH="/etc/sf/ca_root/cacert.pem"; EXPIRY_DATE=$(openssl x509 -enddate -noout -in "$CERT_PATH" | cut -d= -f2); EXPIRY_DATE_SECONDS=$(date -d "$EXPIRY_DATE" +%s); CURRENT_DATE_SECONDS=$(date +%s); THIRTY_DAYS_SECONDS=$((30*24*60*60)); EXPIRY_THRESHOLD=$((CURRENT_DATE_SECONDS + THIRTY_DAYS_SECONDS)); DAYS_LEFT=$(( (EXPIRY_DATE_SECONDS - CURRENT_DATE_SECONDS) / (24*60*60) )); if [ "$EXPIRY_DATE_SECONDS" -le "$CURRENT_DATE_SECONDS" ]; then DAYS_EXPIRED=$(( (CURRENT_DATE_SECONDS - EXPIRY_DATE_SECONDS) / (24*60*60) )); echo -e "\nThe certificate has expired $DAYS_EXPIRED days ago.\nIn case the sftunnel communication with the FTD is not yet lost, you need to take action immediately in renewing the certificate.\n"; elif [ "$EXPIRY_DATE_SECONDS" -le "$EXPIRY_THRESHOLD" ]; then echo -e "\nThe certificate will expire within the next 30 days!\nIt is ONLY valid for $DAYS_LEFT more days.\nIt is recommended to take action in renewing the certificate as quickly as possible.\n"; else echo -e "\nThe certificate is valid for more than 30 days.\nIt is valid for $DAYS_LEFT more days.\nThere is no immediate need to perform action but this depends on how far the expiry date is in the future.\n"; fi
Un exemple de configuration où le certificat est encore valide pendant plusieurs années est affiché.
Avec les mises à jour récentes de VDB (399 ou plus), vous êtes automatiquement alerté lorsque votre certificat expire dans les 90 jours. Par conséquent, vous n'avez pas besoin d'effectuer un suivi manuel vous-même, car vous êtes alerté lorsque vous approchez du délai d'expiration. Il apparaît ensuite sur la page Web de FMC sous deux formes. Les deux méthodes font référence à la page d'avis de champ.
La première méthode est via l'onglet Tâche. Ce message est rémanent et disponible pour l'utilisateur, sauf s'il est explicitement fermé. La fenêtre contextuelle de notification s'affiche également et est disponible jusqu'à ce que l'utilisateur la ferme explicitement. Il s'affiche toujours comme une erreur.
La deuxième méthode est via Health Alert. Cela apparaît dans l'onglet Health (Intégrité), mais cela n'est pas rémanent et remplace ou supprime lorsque le moniteur d'intégrité est exécuté, qui par défaut est toutes les 5 minutes. Il affiche également une fenêtre contextuelle de notification qui doit être explicitement fermée par l'utilisateur. Cela peut apparaître à la fois comme une erreur (lorsqu'il est arrivé à expiration) et comme un avertissement (lorsqu'il va expirer).
C'est la meilleure situation car, selon l'expiration du certificat, nous avons encore le temps. Soit nous adoptons l'approche entièrement automatisée (recommandée) qui dépend de la version FMC, soit nous adoptons une approche plus manuelle qui nécessite l'intervention du TAC.
Il s'agit d'une situation dans laquelle aucun temps d'arrêt et un minimum d'opérations manuelles sont prévus dans des circonstances normales.
Avant de continuer, vous devez installer le correctif logiciel correspondant à votre version spécifique, comme indiqué ici. L'avantage ici est que ces correctifs ne nécessitent pas un redémarrage du FMC et donc une éventuelle rupture de la communication sftunnel lorsque le certificat a déjà expiré. Les correctifs disponibles sont les suivants :
Une fois le correctif installé, le FMC contient maintenant le script generate_certs.pl qui :
Remarque : Le script generate_certs.pl vérifie actuellement si des opérations critiques sont en cours d'exécution. Si ce n'est pas le cas, son exécution échoue.
Les opérations critiques peuvent être : Agent Smart non enregistré ou enregistrement en cours, Tâche de sauvegarde/restauration en cours, Tâche de mise à jour SRU en cours, Tâche de mise à jour VDB en cours, Tâche de domaine en cours, Opération HA en cours ou Mise à niveau en cours d'exécution.
Par conséquent, vous ne pouvez pas exécuter ce script lorsque vous utilisez uniquement des licences classiques sur votre FMC (ou que l'une des opérations répertoriées doit être terminée en premier), auquel cas vous devez contacter le TAC Cisco pour contourner cette vérification, régénérer les certificats, puis annuler le contournement à nouveau.
Il est donc recommandé (si possible) de :
Remarque : Lorsque FMC est exécuté en haute disponibilité (HA), vous devez d’abord effectuer l’opération sur le noeud principal, puis sur le noeud secondaire, car il utilise ces certificats pour communiquer entre les noeuds FMC. L'autorité de certification interne sur les deux noeuds FMC est différente.
Dans l'exemple ici, vous voyez qu'il crée un fichier journal sur /var/log/sf/sfca_generation.log, indique d'utiliser sftunnel_status.pl, indique l'heure d'expiration sur l'InternalCA et indique pour toute défaillance sur elle. Ici, par exemple, il n'a pas réussi à transmettre les certificats au périphérique BSNS-1120-1 et au périphérique EMEA-FPR3110-08, ce qui est attendu parce que le sftunnel était désactivé pour ces périphériques.
Afin de corriger le sftunnel pour les connexions défaillantes, vous exécutez les étapes suivantes :
cp cacert.pem cacert.pem.backup
cp sftunnel-cert.pem sftunnel-cert.pem.backup
cp sftunnel-key.pem sftunnel-key.pem.backup
> cacert.pem
> sftunnel-cert.pem
> sftunnel-key.pem
Dans cette situation, nous avons deux scénarios différents. Soit toutes les connexions sftunnel sont toujours opérationnelles, soit elles ne le sont plus (ou ne le sont plus partiellement).
Nous pouvons appliquer la même procédure que celle indiquée dans la section Certificat non encore expiré (scénario idéal) - Approche recommandée.
Cependant, ne mettez PAS à niveau ou ne redémarrez PAS le FMC (ou tout FTD) dans cette situation car il déconnecte toutes les connexions sftunnel et nous devons exécuter manuellement toutes les mises à jour de certificat sur chaque FTD. La seule exception à celle-ci, sont les versions de correctifs répertoriées car elles ne nécessitent pas de redémarrage du FMC.
Les tunnels restent connectés et les certificats sont remplacés sur chacun des FTD. Dans le cas où certains certificats ne seraient pas remplis, il vous invite avec ceux qui ont échoué et vous devez adopter l'approche manuelle comme indiqué précédemment sur la section précédente.
Nous pouvons appliquer la même procédure que celle indiquée dans la section Certificat non encore expiré (scénario idéal) - Approche recommandée. Dans ce scénario, le nouveau certificat sera généré sur le FMC mais ne pourra pas être copié sur les périphériques car le tunnel est déjà arrêté. Ce processus peut être automatisé avec les scripts copy_sftunnel_certs.py / copy_sftunnel_certs_jumpserver.py
Si tous les périphériques FTD sont déconnectés du FMC, nous pouvons mettre à niveau le FMC dans cette situation car il n'a pas d'impact sur les connexions sftunnel. Si certains périphériques sont toujours connectés via sftunnel, alors sachez que la mise à niveau du FMC ferme toutes les connexions sftunnel et qu'elles ne se réactivent pas en raison de l'expiration du certificat. L'avantage de la mise à niveau ici serait qu'elle vous fournit une bonne orientation sur les fichiers de certificat qui doivent être transférés à chacun des FTD.
Dans cette situation, vous pouvez alors exécuter le script generate_certs.pl à partir du FMC qui génère les nouveaux certificats mais vous devez quand même les pousser vers chacun des périphériques FTD manuellement. En fonction de la quantité de périphériques, cette opération est faisable ou peut s'avérer fastidieuse. Cependant, lors de l'utilisation des scripts copy_sftunnel_certs.py / copy_sftunnel_certs_jumpserver.py, ceci est hautement automatisé.
Révision | Date de publication | Commentaires |
---|---|---|
3.0 |
26-Nov-2024 |
Mise à jour des situations où generate_certs.pl est en attente d'autres opérations à terminer en premier. |
2.0 |
14-Nov-2024 |
Hotfix comme approche recommandée |
1.0 |
14-Nov-2024 |
Première publication |