Как автоматически продлевать сертификаты в pfSense?

Вопрос или проблема

У меня есть внутренний центр сертификации, настроенный в pfSense, который выдает сертификат для webConfigurator. Сертификат может бытьRenewed через интерфейс менеджера сертификатов. Как можно автоматизировать процесс продления или выполнить его из оболочки.

введите описание изображения здесь

Чтобы продлить сертификат webConfigurator, вы можете выполнить эту команду из консоли или Diagnostics -> Командная строка:

pfSsh.php playback generateguicert

Это создаст новый сертификат, который включает в себя текущее имя хоста брандмауэра в поле CN.

Это также должно сработать как root в cronjob (что вы можете легко настроить, если установите пакет Cron).

Для общего случая вот скрипт, который я написал, основываясь на коде pfSense в system_certmanager_renew.php:

#!/usr/local/bin/php -f
<?php

require_once("certs.inc");

$type = $argv[1];
$refid = $argv[2];

$reusekey = true;
$strictsecurity = true;

switch ($type) {
 case 'ca':
  $torenew = & lookup_ca($refid);
  $service_function = 'ca_get_all_services';
  $typestring = gettext("Центр сертификации");
  break;
 case 'cert':
  $torenew = & lookup_cert($refid);
  $service_function = 'cert_get_all_services';
  $typestring = gettext("Сертификат");
  break;
 default:
  exit;
}

$old_serial = cert_get_serial($torenew['crt']);

if (cert_renew($torenew, $strictsecurity)) {
 $new_serial = cert_get_serial($torenew['crt']);

 $message = sprintf(gettext("Продлен %s %s (%s) - Серийный номер %s -> %s"),
  $typestring,
  $torenew['refid'],
  $torenew['descr'],
  $old_serial,
  $new_serial);

 log_error($message);
 write_config($message);

 ca_setup_trust_store();
 cert_restart_services($service_function($torenew['refid']));

 echo "$message\n";
}

Вы можете вызвать его или включить в cronjob, с чем-то вроде:

/root/renew_cert.php cert 582b34111ec96

Идентификатор сертификата можно увидеть в URL при редактировании CA (например, https://pfsense/system_certmanager.php?act=edit&id=582b34111ec96)

Если вы передадите ca вместо cert, это можно использовать для продления сертификата Центра сертификации вместо сертификата.

Ответ или решение

Чтобы автоматически обновлять сертификаты в pfSense, вы можете использовать команду pfSsh.php playback generateguicert, которая обновляет сертификат для webConfigurator. Однако, если вам нужно реализовать более универсальное решение для основного процесса обновления сертификатов, вы можете разработать свой скрипт на PHP, опираясь на встроенные функции pfSense. Вот как это можно сделать:

Шаги для автоматического обновления сертификатов в pfSense:

  1. Использование встроенной команды для обновления сертификата веб-интерфейса:
    Вы можете выполнить команду из консоли или через меню Diagnostics:

    pfSsh.php playback generateguicert

    Эта команда создаст новый сертификат и автоматически обновит его, включив текущее имя хоста в поле CN.

  2. Создание пользовательского сценария для обновления сертификатов:
    Если вам необходимо обновлять не только сертификаты для webConfigurator, но и другие сертификаты, вы можете написать PHP-скрипт на основе кода pfSense.

    Пример скрипта:

    #!/usr/local/bin/php -f
    <?php
    
    require_once("certs.inc");
    
    $type = $argv[1];
    $refid = $argv[2];
    
    $reusekey = true;
    $strictsecurity = true;
    
    switch ($type) {
       case 'ca':
           $torenew = &lookup_ca($refid);
           $service_function = 'ca_get_all_services';
           $typestring = gettext("Certificate Authority");
           break;
       case 'cert':
           $torenew = &lookup_cert($refid);
           $service_function = 'cert_get_all_services';
           $typestring = gettext("Certificate");
           break;
       default:
           exit;
    }
    
    $old_serial = cert_get_serial($torenew['crt']);
    
    if (cert_renew($torenew, $strictsecurity)) {
       $new_serial = cert_get_serial($torenew['crt']);
       $message = sprintf(gettext("Renewed %s %s (%s) - Serial %s -> %s"),
           $typestring,
           $torenew['refid'],
           $torenew['descr'],
           $old_serial,
           $new_serial);
    
       log_error($message);
       write_config($message);
       ca_setup_trust_store();
       cert_restart_services($service_function($torenew['refid']));
    
       echo "$message\n";
    }
  3. Запуск скрипта:
    Вы можете запустить этот скрипт вручную через командную строку, передавая тип сертификата и его refid:

    /root/renew_cert.php cert 582b34111ec96

    Чтобы получить refid, просто откройте интерфейс pfSense для управления сертификатами и посмотрите URL при редактировании сертификата.

  4. Настройка cron для автоматизации:
    Если вы хотите, чтобы этот процесс выполнялся автоматически, можно настроить cron-задачу, установив пакет Cron в pfSense. Добавьте новую задачу с вашим скриптом, указав частоту выполнения.

Примечания:

  • Убедитесь, что у вас есть необходимые права доступа для выполнения этих команд и редактирования конфигураций.
  • Проверяйте логи и конфигурацию после обновления сертификатов, чтобы убедиться, что все сервисы работают как надо.
  • Важно следить за сроками действия сертификатов, чтобы не допустить их истечения во время автоматического обновления.

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

Оцените материал
Добавить комментарий

Капча загружается...