Обновление сертификатов
-
Есть с десяток пфсенсов и новый сетрификат, который нужно на них поставить. Есть ли какой-то вариант это автоматизировать, чтобы не бегать по всем серверам и не ставить его вручную через UI?
Так же было бы неплохо, если бы была возможность заменить этим сетрификатом старый, который сейчас используется для SSL оффлоадинга в haproxy.
-
Вкл на пф SSH
Поискать ГДЕ живут на пф эти сертификаты
Если Win, то с пом pscp попробовать их заменить (написать bat-ник).
Или попробовать что-то типа ansible. если есть *nix.
Но не уверен, что пф ваши изменения не перепишет. -
Насколько я понимаю - все они живут в /cf/conf/config.xml
Можно конечно тупо заменить их sed-ом, но я не уверен, что это правильный вариант. -
Пробуем. Отписываемся )
-
Насколько я понимаю - все они живут в /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
-
В итоге решил сделать с помощью ансибла.
Нашёл модули для pFsense https://github.com/bevhost/ansible-module-pfsenseПлэйбук выглядел приблизительно так:
--- - name: Install requirement pythoon libs local_action: pip name=hvac - name: Load SSL Certificate pfsense_cert: refid: "{{ refid }}" descr: "{{ cert_descr }}" crt: "{{ certs['data']['cert'] | b64encode }}" prv: "{{ certs['data']['key'] | b64encode }}" - name: Restart the web GUI shell: /etc/rc.restart_webgui - name: Restart HAProxy shell: /usr/local/etc/rc.d/haproxy.sh restart
refid - ID сертификата в конфиге. если мы хотим автоматом заменить старый на новый, то он должен быть таким же как у старого (я использовал: refid: "{{ cert_name | hash('sha1') }}" )
descr - имя сертификата в pFsense
crt - сертификат
prv - ключ