Recentemente adicionei um Supermicro X10DRi-T4+ ao meu homelab e uma ideia natural foi instalar um certificado SSL do Let’s Encrypt e substituir o original auto-assinado. Para isso, tive que adaptar alguns scripts python [1] [2] publicados por Jari Turkia. Nenhum deles funcionou no Supermicro X10DRi-T4+, mas não foi difícil consertá-los, então aqui vamos nós!
Cinto de utilidades homelab para o resgate
Como este post se baseia em scripts razoavelmente complexos, eu os adicionei ao repositório Github Homelab Utility Belt, que é público! O repo tem dois scripts que vamos usar neste post:
- Um script Python que instala o certificado SSL na Interface IPMI do Supermicro
- Um script bash que uso no Synology para disparar a substituição, através do programador de tarefas
Este último usa o primeiro, é claro!
Testando o script do atualizador do certificado IPMI
Embora queremos usar o script Bash para automação, precisamos verificar se o script Python é compatível com o seu Supermicro. Este script só foi testado em Supermicro X10DRi-T4+, mas talvez você tenha sorte. A versão original tinha código para suportar placas baseadas no modelo X11, mas eu apaguei dessa versão porque eu não podia testar as modificações e atestar o funcionamento!
Para começar, clone homelab utility belt (também conhecido como HUB) e instale suas dependências:
$ git clone https://github.com/thiagocrepaldi/homelab-utility-belt
$ cd homelab-utility-belt/supermicro/ipmi-update
$ pip install -r requirements.txt
Em seguida, execute python3 ipmi-updater.py --help
para obter ajuda de como usar o script. A saída seria algo como:
usage: ipmi-updater.py [-h] --ipmi-url IPMI_URL --key-file KEY_FILE --cert-file CERT_FILE --username USERNAME --password PASSWORD [--no-reboot] [-log-level {0,1,2}] Update Supermicro IPMI SSL certificate optional arguments: -h, --help show this help message and exit --ipmi-url IPMI_URL Supermicro IPMI 2.0 URL --key-file KEY_FILE X.509 Private key filename --cert-file CERT_FILE X.509 Certificate filename --username USERNAME IPMI username with admin access --password PASSWORD IPMI user password --no-reboot The default is to reboot the IPMI after upload for the change to take effect. --log-level {0,1,2} Log level (0: quiet, 1: info, 2: debug)
Um exemplo de como usar o script é:
$ python3 supermicro/ipmi-updater/ipmi-updater.py --ipmi-url https://mysupermicro --username ADMIN --password ADMIN --key-file /path/to/private_key.pem --cert-file /path/to/cert_file.cert --log-level=1
Supondo que você inseriu todos os argumentos corretamente, o nível de log está definido como 1, a saída para um IPMI compatível seria:
************************************************************ Authenticating on Supermicro IPMI! ************************************************************ Login succeeded. ************************************************************ Fetching current IPMI certificate! ************************************************************ There exists a certificate, which is valid until: ... ************************************************************ Uploading new IPMI certificate! ************************************************************ New IPMI certificate was uploaded. ************************************************************ Checking new IPMI certificate was properly uploaded! ************************************************************ New IPMI certificate is valid. ************************************************************ Fetching new IPMI certificate! ************************************************************ After upload, there exists a certificate, which is valid until: YYY ************************************************************ Rebooting IPMI to apply changes! ************************************************************ ************************************************************ All done! ************************************************************
É possível que sua placa X10 não seja compatível, o que, em seguida, retornaria um erro em uma das APIs REST que este script invoca. Sugiro que você execute cada um deles individualmente e depure seu caminho. Se esse for o seu caso, você pode deixar cair uma mensagem e eu posso tentar ajudar, mas como eu não tenho o seu hardware, não há garantias lá!
Automatizando a atualização do certificado através do Programador de Tarefas do NAS Synology
Se tudo correu bem na etapa anterior, seu Supermicro reiniciará. Assim que retornar, o novo certificado SSL estará em uso. No entanto, como você sabe, certificados Let’s Encrypt expiram a cada 3 meses, então precisamos substituí-los periodicamente. Para esta tarefa, uso o NAS Synology para copiar os certificados do meu pfSense, que emite os certificados para o meu homelab inteiro.
A partir deste ponto, estou assumindo que você possui um NAS Synology, emite seus certificados Let’s Encrypt no pfSense e, finalmente, os copia para o NAS. Deve ser fácil adaptar este fluxo de trabalho para seu próprio uso.
Instalação do certificado Let’s Encrypt no Supermicro em um cronograma
Volte para o Painel de Controle >> Programador de Tarefas >> Criar >> Tarefa agendada >> script definido pelo usuário mais uma vez e faça o seguinte:
Geral
- Tarefa: Instalar certificado no Supermicro
- Usuário: root
Programação
- Executar nos seguintes dias: Escolha o mesmo dia da tarefa que copia os certificados para o seu NAS
- Hora da primeira execução: Escolha um tempo depois dessa tarefa
- Frequência: Todos os dias
Configurações de tarefas
Script definido pelo usuário: use o seguinte modelo para substituir os certificados existentes com os novos
# Suas variáveis de ambiente
PYTHON=python3
IPMI_UPDATER_DIR="/tmp/ipmi-updater/"
IPMI_UPDATER_SH="${IPMI_UPDATER_DIR}/supermicro-ipmi-updater.sh"
SUPERMICRO_CERT="/volume1/Supermicro/Supermicro.crt"
SUPERMICRO_KEY="/volume1/Supermicro/Supermicro.key"
SUPERMICRO_ADMIN="ADMIN"
SUPERMICRO_PASS="ADMIN"
SUPERMICRO_URL="https://mysupermicro.lan.example.com"
# Preparação de pasta temporária para updater IPMI
rm -r ${IPMI_UPDATER_DIR}/* || mkdir -p ${IPMI_UPDATER_DIR}
# Baixando script do updater IPMI
wget https://raw.githubusercontent.com/thiagocrepaldi/homelab-utility-belt/main/synology/supermicro-ipmi-updater.sh -O ${IPMI_UPDATER_SH}
# Atualizar certificado IPMI
bash ${IPMI_UPDATER_SH} -p ${PYTHON} -i ${IPMI_UPDATER_DIR} -c ${SUPERMICRO_CERT} -k ${SUPERMICRO_KEY} -a ${SUPERMICRO_ADMIN} -s ${SUPERMICRO_PASS} -u ${SUPERMICRO_URL}
Clique em OK para criar a tarefa agendada. Por fim, clique em Executar para instalar certificados. É isso!