Recentemente, tivemos a tarefa de monitorar o período de validade dos certificados em servidores com Windows. Bem, como me levantei, depois que os certificados se transformaram em abóbora várias vezes, ao mesmo tempo em que o colega barbudo responsável por sua renovação estava de férias. Depois disso,
suspeitamos de algo e decidimos pensar sobre isso. Como estamos introduzindo lentamente o sistema de monitoramento NetXMS, ele se tornou o principal e, em princípio, o único candidato a essa tarefa.
O resultado foi obtido da seguinte forma:

E o processo em si é mais adiante.
Vamos lá Não há um contador interno para certificados expirados no NetXMS; portanto, você precisa criar seus próprios e usar scripts para fornecer dados. Claro, no Powershell, é o Windows. O script deve ler todos os certificados no sistema operacional, levar a data de validade em dias a partir daí e transferir esse número para o NetXMS. Através de seu agente. Vamos começar com ele.
Opção um , o mais fácil. Basta obter o número de dias antes que o certificado expire na data mais próxima.
Para que o servidor NetXMS saiba sobre a existência de nosso parâmetro personalizado, ele deve recebê-lo do agente. Caso contrário, este parâmetro não poderá ser adicionado devido à sua ausência. Portanto, no arquivo de configuração do agente
nxagentd.conf , adicionamos uma linha de parâmetro externa com o nome
HTTPS.CertificateExpireDateSimple , na qual escrevemos o script para execução:
ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "\\server\share\NetXMS_CertExpireDateSimple.ps1"
Dado que o script é executado na rede, você não deve esquecer a
Diretiva de Execução e também não se esquece dos outros "-NoLogo -NoProfile -NonInteractive", que eu omiti para melhor legibilidade do código.
Como resultado, a configuração do agente é mais ou menos assim:
# # NetXMS agent configuration file # Created by agent installer at Thu Jun 13 11:24:43 2019 # MasterServers = netxms.corp.testcompany.ru ConfigIncludeDir = C:\NetXMS\etc\nxagentd.conf.d LogFile = {syslog} FileStore = C:\NetXMS\var SubAgent = ecs.nsm SubAgent = filemgr.nsm SubAgent = ping.nsm SubAgent = logwatch.nsm SubAgent = portcheck.nsm SubAgent = winperf.nsm SubAgent = wmi.nsm ExternalParameter = HTTPS.CertificateExpireDateSimple: powershell.exe -File "\\server\share\NetXMS_CertExpireDateSimple.ps1"
Depois disso, você precisa salvar a configuração e reiniciar o agente. Você pode fazer isso no console do NetXMS: abra a configuração (arquivo de confuguração do agente de edição), edite, execute Save & Apply e, como resultado, de fato, a mesma coisa acontecerá. Em seguida, leia novamente a configuração (Poll> Configuration), se não houver força suficiente para esperar. Após essas etapas, você poderá adicionar nosso parâmetro personalizado.
No console do NetXMS, vamos para a
Configuração de coleta de dados do servidor experimental no qual vamos monitorar os certificados e criar um novo parâmetro nele (no futuro, após a configuração, faz sentido transferi-lo para os modelos). Selecionamos HTTPS.CertificateExpireDateSimple na lista, digite Descrição com um nome amigável, defina o tipo como Inteiro e defina o intervalo de pesquisa. Não faz sentido torná-lo muito curto para não obstruir o banco de dados com informações desnecessárias; será inconveniente aguardar muito tempo ao verificar. Para certificados, geralmente defino 600 segundos. No momento da depuração, faz sentido reduzi-lo por 30 segundos, por exemplo:

Tudo está pronto, desde que seja suficiente. Você pode verificar ... não, é muito cedo. Agora, é claro, não teremos nada. Só porque o script ainda não foi escrito. Corrigimos essa omissão. O script fornecerá apenas um número, o número de dias restantes até que o certificado expire. O menor de todos os disponíveis. Script de exemplo:
try {
Acontece assim:

723 dias, antes que o certificado expire por quase mais dois anos. É lógico, porque recentemente reescrevi certificados na mesa de testes do Exchange.
Foi uma opção fácil. Provavelmente alguém ficaria feliz com isso, mas queríamos mais. Estabelecemos a tarefa de obter uma lista de todos os certificados no servidor, por nome, e para cada um ver o número de dias restantes até que o certificado expire.
A segunda opção , um pouco mais complicada.
Novamente, editamos a configuração do agente e, em vez da linha com ExternalParameter, escrevemos outros dois:
ExternalList = HTTPS.CertificateNames: powershell.exe -File "\\server\share\netxms_CertExternalNames.ps1" ExternalParameter = HTTPS.CertificateExpireDate(*): powershell.exe -File "\\server\share\netxms_CertExternalParameter.ps1" -CertificateId "$1"
No
ExternalList , obtemos apenas uma lista de strings. No nosso caso, uma lista de cadeias com nomes de certificados. Uma lista dessas linhas, temos o script. O nome da lista é
HTTPS.CertificateNames .
Script NetXMS_CertNames.ps1:
E já em
ExternalParameter , alimentamos as linhas da lista ExternalList e, na saída, obtemos o mesmo número de dias para cada um. O identificador é o certificado de impressão digital. Observe que HTTPS.CertificateExpireDate nesta opção contém um asterisco (*). Isso é necessário para que ele aceite variáveis externas, apenas nosso CertificateId.
Script NetXMS_CertExpireDate.ps1:
Na configuração do servidor de coleta de dados, crie um novo parâmetro. Em Parâmetro, selecione nosso
HTTPS.CertificateExpireDate (*) na lista e (atenção!) Altere o asterisco para
{instance} . Este ponto importante permitirá que você crie um contador separado para cada instância (certificado). O restante é preenchido, como na versão anterior:

Para que os contadores sejam algo para criar, na guia Descoberta da Instância, selecione a Lista de Agentes na lista e, no campo Nome da Lista, insira o nome da ExternalList no script - HTTPS.CertificateNames.
Quase pronto, aguarde um pouco ou force Poll> Configuration e Poll> Instance Discovery, se for completamente impossível esperar. Como resultado, obtemos todos os nossos certificados com datas de validade:

O que é necessário? Bem, sim, apenas um verme de perfeccionismo olha para esta impressão digital desnecessária em nome do balcão com olhos tristes e não permite terminar o artigo. Para alimentá-lo, abra as propriedades do contador novamente e, na guia Descoberta da Instância no campo "Script do filtro de descoberta da instância", adicione o script escrito em
NXSL (
idioma interno do
NetXMS ):
instance = $1; if (instance ~= "^(.*)\s\-\s\[T\:[a-zA-Z0-9]+\]$") { return %(true, instance, $1); } return true;
que filtrará a impressão digital:

E para exibi-lo filtrado, na guia Geral no campo Descrição, altere CertificateExpireDate: {instance} para
CertificateExpireDate: {instance-name} :

Tudo, finalmente, o final do
KDPV :

Beleza?
Resta configurar alertas para que eles cheguem por correio quando o certificado expirar em seu fim lógico.
1. Primeiro, você precisa criar um modelo de evento para ativá-lo ao diminuir o valor do contador para algum limite definido por nós. Na
Configuração de Eventos, crie dois novos modelos com nomes, como
CertificateExpireDate_Threshold_Activate com o status de Aviso:

e semelhante
CertificateExpireDate_Threshold_Deactivate com status Normal.
2. Em seguida, vá para as propriedades do contador e defina o limite na guia Limiares:

onde selecionamos nossos eventos criados CertificateExpireDate_Threshold_Activate e CertificateExpireDate_Threshold_Deactivate, definimos o número de medições (amostras) 1 (especificamente, não faz sentido definir um contador específico), o valor é 30 (dias), por exemplo, e, importante, configuramos o tempo de repetição do evento. Para certificados em produção, eu o defino uma vez por dia (86400 segundos); caso contrário, você pode se afogar em alertas (que, a propósito, aconteceram uma vez e, além disso, a caixa de correio ficou cheia no fim de semana). Para depuração, faz sentido definir menos, 60 segundos, por exemplo.
3. Na
Configuração da ação, crie um modelo de mensagem de alerta, como este:

Todos esses% m,% S, etc. - macros nas quais os valores do nosso parâmetro serão substituídos. Eles são descritos em mais detalhes no
manual do NetXMS.
4. Por fim, combinando os pontos anteriores, na
Política de Processamento de Eventos, crie uma regra pela qual um Alarme será criado e uma mensagem será enviada:

Mantemos a política, tudo pode ser testado. Defina o limite mais alto para verificação. Meu certificado mais próximo expira em 723 dias, defino 724 para verificação. Como resultado, recebemos o seguinte alarme:

e esse alerta de email:

Agora isso é tudo. Você pode, é claro, configurar um painel, criar gráficos, mas para certificados será um pouco sem sentido e linhas retas chatas, ao contrário dos gráficos de CPU ou carregamento de memória, por exemplo. Mas, sobre isso de alguma forma outra vez.