Обновление сертификатов



  • Есть с десяток пфсенсов и новый сетрификат, который нужно на них поставить. Есть ли какой-то вариант это автоматизировать, чтобы не бегать по всем серверам и не ставить его вручную через UI?

    Так же было бы неплохо, если бы была возможность заменить этим сетрификатом старый, который сейчас используется для SSL оффлоадинга в haproxy.



  • Вкл на пф SSH
    Поискать ГДЕ живут на пф эти сертификаты
    Если Win, то с пом pscp попробовать их заменить (написать bat-ник).
    Или попробовать что-то типа ansible. если есть *nix.
    Но не уверен, что пф ваши изменения не перепишет.



  • Насколько я понимаю - все они живут в /cf/conf/config.xml
    Можно конечно тупо заменить их sed-ом, но я не уверен, что это правильный вариант.



  • Пробуем. Отписываемся )



  • @grommir

    Насколько я понимаю - все они живут в /cf/conf/config.xml
    Можно конечно тупо заменить их sed-ом, но я не уверен, что это правильный вариант.

    По-моему , тоже это неверный вариант
    Все серты и ключи в конфиге переведены в кодировку base64

    Те если обратите внимание, то увидите
    что ключи , например, в моем случае начинаются с текста
    LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0t

    а должны ( опять же мой случай)

    -----BEGIN EC PRIVATE KEY-----



  • @Konstanti Потому я и интересуюсь - вдруг в cli есть иснструменты для добавления/удаления сетрификатов.



  • @grommir
    По-моему, эту задачу можно решить если только самому написать php скрипт для добавления/обновления сертификатов , при удалении могут быть неприятные последствия , потому что сертификат может быть использован разными модулями и надо отслеживать все ссылки на этот серт .
    Но написание и отладка такого скрипта может занят больше времени , чем обновить сертификаты вручную.



  • На просторах интернета нашел такой скрипт. Судя по коментам - должно работать.

    #!/bin/bash
    host="ipaddress"
    username="username"
    password="password"
    certificate="certificate.pem"
    privatekey="privatekey.pem"
    oldcertificate=$(<certificate.crt.old.txt)
    oldprivatekey=$(<certificate.key.old.txt)
    
    mv $certificate $certificate.combo
    csplit -f $certificate.part $certificate.combo '/-----BEGIN CERTIFICATE-----/' '{*}'
    
    for file in $certificate.part*;
    do echo "Processing $file file..";
    output=$(openssl x509 -noout -subject -in $file);
    if [[ $output = *CN=*.* ]]
    then
            mv $file certificate.pem
    fi
    if [[ $output = *Authority* ]]
    then
            mv $file CA_LetsEncrypt.pem
    fi
    done
    
    cert=$(base64 $certificate)
    cert=$(echo $cert | sed "s/ //g")
    key=$(base64 $privatekey)
    key=$(echo $key | sed "s/ //g")
    
    sshpass -p $password scp $username@$host:/conf/config.xml config.xml
    
    if grep "$cert" config.xml > /dev/null
    then
        echo "Identical certificate found, renewal not required"
    else
        echo "Certificate not found, renewal required"
        sed -i -e "s|$oldcertificate|$cert|g" config.xml
        sed -i -e "s|$oldprivatekey|$key|g" config.xml
        echo $cert > certificate.crt.old.txt
        echo $key > certificate.key.old.txt
        sshpass -p $password scp config.xml $username@$host:/conf/config.xml
        sshpass -p $password ssh $username@$host rm /tmp/config.cache
        sshpass -p $password ssh $username@$host /etc/rc.restart_webgui
        find . -size  0 -name $certificate.part* -print0 |xargs -0 rm --
        rm $certificate.combo
        rm certificate.pem
        rm privatekey.pem
        rm CA_LetsEncrypt.pem
        rm config.xml
    fi
    
    

Log in to reply