O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este documento descreve a renovação do certificado da CA (Certificate Authority, Autoridade de certificação) do túnel do Firepower Management Center (FMC) em relação à conectividade do Firepower Threat Defense (FTD).
A Cisco recomenda que você tenha conhecimento destes tópicos:
Este documento não se restringe a versões de software e hardware específicas.
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
O FMC e o FTD comunicam-se entre si através do túnel sfl (túnel Sourcefire). Essa comunicação usa certificados para tornar a conversação segura em uma sessão TLS. Mais informações sobre o túnel sf e como ele é estabelecido podem ser encontradas neste link.
Na captura de pacotes, você pode ver que o FMC (10.48.79.232 neste exemplo) e o FTD (10.48.79.23) estão trocando certificados. Eles fazem isso para confirmar que conversam com o dispositivo correto e que não há interceptação nem ataque Man-In-The-Middle (MITM). A comunicação é criptografada usando esses certificados e somente a parte que tem a chave privada associada para esse certificado pode descriptografá-la novamente.
Você pode ver que os certificados são assinados pela mesma Autoridade de Certificação (CA) interna (emissor) que está configurada no sistema FMC. A configuração é definida no arquivo FMC em /etc/sf/sftunnel.conf que contém algo como:
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;
};
Indica a autoridade de certificação que é utilizada para assinar todos os certificados de túnel duplo (tanto o FTD como o FMC) e o certificado utilizado pelo FMC para enviar a todos os FTD. Este certificado é assinado pela InternalCA.
Quando o FTD se registra no FMC, o FMC também cria um certificado para enviar para o dispositivo FTD que é usado para a comunicação posterior no túnel sf. Este certificado também é assinado pelo mesmo certificado CA interno. No FMC, você pode encontrar esse certificado (e a chave privada) em /var/sf/peers/<UUID-FTD-device> e possivelmente na pasta certs_push e é chamado sftunnel-cert.pem (sftunnel-key.pem para a chave privada). No FTD, você pode encontrá-los em /var/sf/peers/<UUID-FMC-device> com a mesma convenção de nomenclatura.
No entanto, cada certificado também tem um período de validade para fins de segurança. Ao inspecionar o certificado InternalCA, podemos ver também o período de validade, que é de 10 anos para o FMC InternalCA, conforme mostrado na captura de pacotes.
O certificado InternalCA do FMC só é válido por dez anos. Após o prazo de validade, o sistema remoto deixa de confiar neste certificado (bem como nos certificados por ele assinados), o que dá origem a problemas de comunicação sftunnel entre o FTD e os dispositivos do FMC. Isso também significa que várias funcionalidades importantes, como eventos de conexão, pesquisas de malware, regras baseadas em identidade, implantações de políticas e muitas outras coisas não estão funcionando.
Os dispositivos aparecem como desativados na interface do usuário do FMC na guia Devices > Device Management quando o sftunnel não está conectado. O problema relacionado a essa expiração é rastreado na ID de bug da Cisco CSCwd08098. Observe que todos os sistemas são afetados, mesmo quando você executa uma versão fixa do defeito. Mais informações sobre essa correção podem ser encontradas na seção Solução.
O FMC não atualiza automaticamente a CA nem republica os certificados nos dispositivos de FTD. Além disso, não existe qualquer alerta sanitário do CVP que indique que o certificado expira. A ID de bug da Cisco CSCwd08448 é rastreada a este respeito para fornecer um alerta de integridade na interface do usuário do FMC no futuro.
Inicialmente, nada acontece e os canais de comunicação do sftunnel continuam a operar como antes. No entanto, quando a comunicação sftunnel entre os dispositivos FMC e FTD é interrompida e tenta restabelecer a conexão, ela falha e você pode observar linhas de registro no arquivo de registro de mensagens que apontam para a expiração do certificado.
Linhas de log do dispositivo 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
Linhas de registro do dispositivo FMC 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
A comunicação sftunnel pode ser interrompida por vários motivos:
Como há tantas possibilidades que podem interromper a comunicação do túnel, é altamente aconselhável corrigir a situação o mais rápido possível, mesmo quando atualmente todos os dispositivos FTD estão conectados corretamente, apesar do certificado expirado.
A maneira mais fácil é executar esses comandos na sessão SSH do FMC:
expert
sudo su
cd /etc/sf/ca_root
openssl x509 -dates -noout -in cacert.pem
Mostra os elementos de Validade do certificado. A parte principal relevante aqui é o "notAfter" que mostra que o certificado aqui é válido até 5 de outubro de 2034.
Se você preferir que um único comando seja executado que forneça imediatamente a quantidade de dias para os quais o certificado ainda é válido, você poderá usar:
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
Um exemplo de uma configuração em que o certificado ainda é válido por vários anos é mostrado.
Com atualizações recentes do VDB (399 ou superior), você é alertado automaticamente quando seu certificado expira em 90 dias. Portanto, você não precisa rastrear isso manualmente, pois é alertado quando está próximo do tempo de expiração. Em seguida, ele é exibido na página da Web do FMC em dois formulários. Ambas as formas se referem à página de notificação de campo.
O primeiro método é através da Guia Tarefa. Essa mensagem é fixa e está disponível para o usuário, a menos que seja explicitamente fechada. O pop-up de notificação também é exibido e fica disponível até que seja explicitamente fechado pelo usuário. Ele sempre aparece como um erro.
O segundo método é através do Health Alert. Isso aparece na guia Integridade, mas não é difícil e substitui ou remove quando o monitor de integridade é executado, o que por padrão é a cada 5 minutos. Ele também mostra um pop-up de notificação que precisa ser fechado explicitamente pelo usuário. Isso pode aparecer como erro (quando expirado) como um aviso (quando expirará).
Essa é a melhor situação, pois, dependendo da expiração do certificado, ainda temos tempo. Ou adotamos a abordagem totalmente automatizada (recomendada), que depende da versão do FMC, ou adotamos uma abordagem mais manual, que requer interação com o TAC.
Esta é a situação em que não se espera nenhum tempo de inatividade e a menor quantidade de operações manuais em circunstâncias normais.
Antes de continuar, você deve instalar o hotfix para sua versão específica, conforme listado aqui. A vantagem aqui é que esses hotfixes não exigem uma reinicialização do FMC e, portanto, uma possível comunicação sftunnel interrompida quando o certificado já expirou. Os hotfixes disponíveis são:
Após a instalação do hotfix, o FMC agora contém o script generate_certs.pl que:
Note: No momento, o script generate_certs.pl verifica se operações críticas estão em execução. Caso contrário, ele não será executado.
As operações críticas podem ser: Agente inteligente não registrado ou registro em andamento, tarefa de backup/restauração em andamento, tarefa de atualização de SRU em andamento, tarefa de atualização de VDB em andamento, tarefa de domínio em andamento, operação de HA em andamento ou atualização em execução.
Portanto, você não pode executar esse script quando usa apenas Licenças clássicas no FMC (ou qualquer uma das operações listadas precisa ser concluída primeiro). Nesse caso, você precisa entrar em contato com o TAC da Cisco para ignorar essa verificação, gerar novamente os certificados e desfazer o bypass novamente.
Por conseguinte, recomenda-se (se possível):
Note: Quando o FMC estiver em execução no High-Availability (HA), você precisará executar a operação primeiro no nó primário e depois no nó secundário, pois ele também usa esses certificados para se comunicar entre os nós do FMC. A InternalCA em ambos os nós do FMC é diferente.
No exemplo aqui, você vê que ele cria um arquivo de log em /var/log/sf/sfca_generation.log, indica para usar sftunnel_status.pl, indica o tempo de expiração em InternalCA e indica para quaisquer falhas nele. Aqui, por exemplo, ele falhou ao enviar os certificados para o dispositivo BSNS-1120-1 e EMEA-FPR3110-08, o que é esperado porque o sftunnel estava inoperante para esses dispositivos.
Para corrigir o sftunnel das conexões com falha, execute as próximas etapas:
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
Nesta situação, temos dois cenários diferentes. Ou todas as conexões sftunnel ainda estão operacionais ou não estão mais (ou parciais).
Podemos aplicar o mesmo procedimento indicado na seção Certificado ainda não expirou (cenário ideal) - Abordagem recomendada.
No entanto, NÃO atualize nem reinicialize o FMC (ou qualquer FTD) nesta situação, pois ele desconecta todas as conexões sftunnel e precisamos executar manualmente todas as atualizações de certificado em cada FTD. A única exceção a esta, são as versões de Hotfix listadas, pois não exigem uma reinicialização do FMC.
Os túneis permanecem conectados e os certificados são substituídos em cada um dos FTD. Caso alguns certificados falhem ao serem preenchidos, ele o avisa com os que falharam e você precisa fazer a abordagem manual conforme indicado anteriormente na seção anterior.
Podemos aplicar o mesmo procedimento indicado na seção Certificado ainda não expirou (cenário ideal) - Abordagem recomendada. Neste cenário, o novo certificado será gerado no FMC, mas não poderá ser copiado para os dispositivos, pois o túnel já está inoperante. Esse processo pode ser automatizado com os scripts copy_sftunnel_certs.py / copy_sftunnel_certs_jumpserver.py
Se todos os dispositivos do FTD estiverem desconectados do FMC, podemos atualizá-lo nessa situação, pois isso não afeta as conexões de sftunnel. Se ainda houver alguns dispositivos conectados por meio do sftunnel, lembre-se de que a atualização do FMC fecha todas as conexões do sftunnel e elas não são ativadas novamente devido ao certificado expirado. O benefício da atualização aqui seria que ela fornece uma boa orientação sobre os arquivos de certificado que precisam ser transferidos para cada um dos FTDs.
Nessa situação, você pode executar o script generate_certs.pl no FMC que gera os novos certificados, mas ainda é necessário enviá-los para cada um dos dispositivos do FTD manualmente. Dependendo da quantidade de dispositivos, isso pode ser feito ou pode ser uma tarefa entediante. No entanto, ao usar os scripts copy_sftunnel_certs.py / copy_sftunnel_certs_jumpserver.py, isso é altamente automatizado.
Revisão | Data de publicação | Comentários |
---|---|---|
3.0 |
26-Nov-2024 |
Atualize as situações em que generate_certs.pl está pendente em outras operações para ser concluído primeiro. |
2.0 |
14-Nov-2024 |
Hotfix como a abordagem recomendada |
1.0 |
14-Nov-2024 |
Versão inicial |