# Сертификаты pfSense - CA, TLS, Let's Encrypt

> Создание и управление сертификатами в pfSense - внутренний CA, серверные и клиентские сертификаты, ACME пакет для автоматизации Let's Encrypt

Source: https://opennix.org/docs/pfsense/certificates/pfsense-certificate-management/


Менеджер сертификатов pfSense (System > Certificates) предоставляет централизованное управление всеми компонентами PKI - центрами сертификации, сертификатами и списками отзыва. Все сертификаты, используемые компонентами pfSense, хранятся в единой базе и доступны для выбора в настройках соответствующих сервисов. Данное руководство описывает полный цикл работы с сертификатами - от создания внутреннего CA до автоматизации получения публичных сертификатов через Let's Encrypt.

## Структура Certificate Manager

Менеджер сертификатов разделён на три вкладки, каждая из которых отвечает за отдельный компонент PKI.

| Вкладка | Назначение |
|---|---|
| Authorities | Управление центрами сертификации (CA) |
| Certificates | Управление серверными и клиентскими сертификатами |
| Certificate Revocation | Управление списками отзыва сертификатов (CRL) |

Переход между вкладками осуществляется из меню **System > Certificates**. Каждый компонент может быть создан локально или импортирован из внешнего источника.

## Создание внутреннего центра сертификации

Внутренний CA (Certificate Authority) является корневым элементом доверия для всей PKI. Все сертификаты, подписанные этим CA, будут приняты сервисами pfSense, настроенными на доверие данному CA.

### Процедура создания CA

1. Перейти в **System > Certificates**, вкладка **Authorities**
2. Нажать **Add** для создания нового CA
3. Заполнить параметры:

| Параметр | Значение | Описание |
|---|---|---|
| Descriptive name | Internal-CA | Произвольное имя для идентификации CA в интерфейсе |
| Method | Create an internal Certificate Authority | Создание нового самоподписанного CA |
| Key type | RSA | Тип криптографического ключа |
| Key length | 2048 или 4096 | Длина ключа в битах. 4096 обеспечивает большую криптостойкость |
| Digest Algorithm | SHA256 | Алгоритм хэширования для подписи |
| Lifetime | 3650 | Срок действия CA в днях (10 лет) |
| Common Name | internal-ca | Уникальное имя CA в формате CN |
| Country Code | RU | Код страны (ISO 3166-1 alpha-2) |
| State/Province | Moscow | Регион |
| City | Moscow | Город |
| Organization | Company Name | Название организации |

4. Нажать **Save** для создания CA

После создания CA его сертификат (без закрытого ключа) необходимо экспортировать и установить на клиентские устройства для обеспечения доверия. Экспорт выполняется нажатием на значок загрузки напротив CA в списке.

### Промежуточные CA

pfSense поддерживает создание промежуточных CA, подписанных корневым CA. Это позволяет выстраивать цепочку доверия и ограничивать область применения сертификатов. Для создания промежуточного CA следует выбрать метод **Create an intermediate Certificate Authority** и указать родительский CA.

Рекомендуется создавать отдельные CA для различных целей:

- CA для OpenVPN-подключений
- CA для IPsec VPN
- CA для веб-интерфейса и внутренних сервисов

Такое разделение обеспечивает изоляцию - отзыв или компрометация одного CA не затрагивает сертификаты, выданные другими CA.

## Создание серверных сертификатов

Серверные сертификаты используются для идентификации сервисов pfSense перед клиентами. Типичные сценарии применения - защита веб-интерфейса (HTTPS), серверная сторона OpenVPN и серверная часть IPsec.

### Процедура создания серверного сертификата

1. Перейти в **System > Certificates**, вкладка **Certificates**
2. Нажать **Add/Sign**
3. Заполнить параметры:

| Параметр | Значение | Описание |
|---|---|---|
| Method | Create an internal Certificate | Создание нового сертификата |
| Descriptive name | WebGUI-Cert | Имя для идентификации в интерфейсе |
| Certificate authority | Internal-CA | CA, который подпишет этот сертификат |
| Key type | RSA | Тип ключа |
| Key length | 2048 | Длина ключа |
| Digest Algorithm | SHA256 | Алгоритм хэширования |
| Lifetime | 398 | Срок действия в днях |
| Common Name | firewall.example.com | FQDN сервера |
| Certificate Type | Server Certificate | Тип сертификата |

4. В секции **Alternative Names** добавить все DNS-имена и IP-адреса, по которым будет доступен сервис
5. Нажать **Save**

> **Внимание**:
>
> Современные браузеры требуют наличия Subject Alternative Name (SAN) в сертификате. Поле Common Name (CN) используется только как запасной вариант в устаревших клиентах. Необходимо добавить FQDN и IP-адреса в секцию Alternative Names.

### Привязка сертификата к веб-интерфейсу

После создания серверного сертификата его необходимо назначить веб-интерфейсу:

1. Перейти в **System > Advanced**, вкладка **Admin Access**
2. В поле **SSL/TLS Certificate** выбрать созданный сертификат
3. Нажать **Save**
4. Веб-интерфейс перезагрузится с новым сертификатом

### Срок действия серверных сертификатов

Apple и другие производители браузеров ограничивают максимальный срок действия публичных TLS-сертификатов до 398 дней. Хотя для внутренних сертификатов это ограничение не является обязательным, рекомендуется придерживаться аналогичных сроков для упрощения ротации и снижения рисков компрометации.

## Создание клиентских сертификатов

Клиентские сертификаты используются для аутентификации пользователей при подключении к VPN (OpenVPN, IPsec) и для доступа к ресурсам через Captive Portal.

### Процедура создания клиентского сертификата

1. Перейти в **System > Certificates**, вкладка **Certificates**
2. Нажать **Add/Sign**
3. Заполнить параметры:

| Параметр | Значение | Описание |
|---|---|---|
| Method | Create an internal Certificate | Создание нового сертификата |
| Descriptive name | user-ivanov | Имя пользователя или устройства |
| Certificate authority | VPN-CA | CA для VPN-сертификатов |
| Key type | RSA | Тип ключа |
| Key length | 2048 | Длина ключа |
| Digest Algorithm | SHA256 | Алгоритм хэширования |
| Lifetime | 365 | Срок действия (1 год) |
| Common Name | user-ivanov | Идентификатор пользователя |
| Certificate Type | User Certificate | Тип сертификата |

4. Нажать **Save**

При использовании OpenVPN клиентский сертификат может быть привязан к учётной записи пользователя в User Manager. Это обеспечивает двухфакторную аутентификацию - сертификат (что-то, что есть у пользователя) и пароль (что-то, что знает пользователь).

### Создание сертификата через User Manager

Альтернативный способ создания клиентского сертификата - через учётную запись пользователя:

1. Перейти в **System > User Manager**
2. Редактировать учётную запись пользователя
3. В секции **User Certificates** нажать **Add**
4. Заполнить параметры сертификата
5. Сохранить

Этот метод автоматически привязывает сертификат к пользователю, что упрощает управление при большом количестве VPN-пользователей.

## Импорт внешних сертификатов

pfSense позволяет импортировать сертификаты, полученные от внешних центров сертификации (DigiCert, Sectigo, Let's Encrypt и др.). Импорт необходим в следующих случаях:

- Использование публично доверенных сертификатов для веб-интерфейса
- Интеграция с корпоративной PKI
- Миграция с другого межсетевого экрана

### Процедура импорта CA

1. Перейти в **System > Certificates**, вкладка **Authorities**
2. Нажать **Add**
3. Выбрать метод **Import an existing Certificate Authority**
4. Вставить содержимое CA-сертификата в формате PEM в поле **Certificate data**
5. При необходимости импортировать закрытый ключ CA (требуется для подписи новых сертификатов)
6. Нажать **Save**

### Процедура импорта сертификата

1. Перейти в **System > Certificates**, вкладка **Certificates**
2. Нажать **Add/Sign**
3. Выбрать метод **Import an existing Certificate**
4. Вставить сертификат в формате PEM в поле **Certificate data**
5. Вставить закрытый ключ в поле **Private key data**
6. Нажать **Save**

> **Внимание**:
>
> Закрытый ключ не должен быть защищён паролем (passphrase). Если ключ зашифрован, необходимо предварительно снять защиту командой `openssl rsa -in encrypted.key -out decrypted.key`.

## Списки отзыва сертификатов (CRL)

Certificate Revocation List (CRL) - механизм отзыва скомпрометированных или недействительных сертификатов. При подключении клиента сервис проверяет сертификат по CRL и отклоняет соединение, если сертификат отозван.

### Создание CRL

1. Перейти в **System > Certificates**, вкладка **Certificate Revocation**
2. Нажать **Add** напротив нужного CA
3. Выбрать метод **Create an internal Certificate Revocation List**
4. Указать имя CRL
5. Нажать **Save**

### Отзыв сертификата

1. Открыть CRL для редактирования
2. В секции **Choose a Certificate to Revoke** выбрать сертификат
3. Указать причину отзыва (Key Compromise, CA Compromise, Cessation of Operation и др.)
4. Нажать **Add**

После отзыва сертификата все текущие подключения, использующие этот сертификат, будут разорваны при следующей проверке CRL. Для OpenVPN это происходит при переустановке TLS-сессии.

### Привязка CRL к сервисам

CRL необходимо явно привязать к сервису для активации проверки:

- **OpenVPN**: в настройках сервера, поле **Peer Certificate Revocation List**
- **IPsec**: проверка CRL настраивается в параметрах Phase 1

Без привязки CRL к сервису отозванные сертификаты будут продолжать приниматься.

## Пакет ACME для Let's Encrypt

ACME (Automated Certificate Management Environment) - протокол автоматического получения и обновления сертификатов от публичных CA. Пакет ACME для pfSense позволяет автоматизировать получение бесплатных TLS-сертификатов от Let's Encrypt.

### Установка пакета ACME

1. Перейти в **System > Package Manager**, вкладка **Available Packages**
2. Найти пакет **acme**
3. Нажать **Install** и подтвердить установку

После установки пакет доступен в меню **Services > Acme Certificates**.

### Регистрация аккаунта Let's Encrypt

1. Перейти в **Services > Acme Certificates**, вкладка **Account Keys**
2. Нажать **Add**
3. Заполнить параметры:

| Параметр | Значение |
|---|---|
| Name | LetsEncrypt-Prod |
| ACME Server | Let's Encrypt Production ACME v2 |
| Email Address | admin@example.com |

4. Нажать **Create new account key**
5. Нажать **Register ACME account key**
6. Нажать **Save**

Для тестирования рекомендуется сначала использовать **Let's Encrypt Staging** для избежания ограничений на количество запросов.

### Создание сертификата через ACME

1. Перейти на вкладку **Certificates**
2. Нажать **Add**
3. Заполнить параметры:

| Параметр | Значение | Описание |
|---|---|---|
| Name | firewall-acme | Имя сертификата |
| Status | Active | Статус |
| Acme Account | LetsEncrypt-Prod | Ранее созданный аккаунт |
| Private Key | 2048-bit RSA | Тип и длина ключа |
| Domain SAN list | firewall.example.com | Список доменных имён |

4. В секции **Domain SAN list** выбрать метод валидации:

| Метод валидации | Когда использовать |
|---|---|
| Standalone HTTP server | Порт 80 доступен из интернета, нет веб-сервера |
| Standalone TLS-ALPN | Порт 443 доступен, нет других TLS-сервисов |
| DNS-Manual | Ручное добавление DNS-записи (не подходит для автоматизации) |
| DNS-Cloudflare/Route53/etc. | Автоматическая DNS-валидация через API провайдера |

5. Нажать **Save**
6. Нажать **Issue/Renew** для получения сертификата

### Автоматическое обновление

Пакет ACME автоматически создаёт задание cron для обновления сертификатов. По умолчанию проверка выполняется ежедневно, и сертификат обновляется при приближении срока истечения (менее 30 дней).

Для применения обновлённого сертификата к веб-интерфейсу необходимо включить опцию **ACME Renewal** в настройках сертификата и выбрать действие **Restart webConfigurator** в поле **Actions list**.

### Wildcard-сертификаты

Let's Encrypt поддерживает выдачу wildcard-сертификатов (*.example.com), но только через DNS-валидацию. Метод HTTP-валидации для wildcard-сертификатов недоступен. Необходимо настроить интеграцию с DNS-провайдером через API.

## Где используются сертификаты

Сертификаты, управляемые через Certificate Manager, используются в следующих компонентах pfSense.

| Компонент | Тип сертификата | Назначение |
|---|---|---|
| Web GUI | Серверный | HTTPS-доступ к веб-интерфейсу |
| OpenVPN Server | Серверный | Идентификация сервера перед клиентами |
| OpenVPN Client | Клиентский | Аутентификация пользователя на сервере |
| IPsec | Серверный/Клиентский | Аутентификация участников VPN-туннеля |
| Captive Portal | Серверный | HTTPS-портал авторизации |
| HAProxy | Серверный | TLS-терминация на балансировщике |
| LDAP Auth | CA | Верификация LDAP-сервера при подключении |
| Syslog (TLS) | Серверный/CA | Шифрование передачи логов |

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

### Ручное обновление

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

### Рекомендации по ротации

| Тип сертификата | Рекомендуемый срок | Обоснование |
|---|---|---|
| CA | 10-20 лет | Замена CA требует переиздания всех сертификатов |
| Серверный | 1-2 года | Соответствие требованиям браузеров |
| Клиентский | 1 год | Регулярная ротация для снижения рисков |
| ACME (Let's Encrypt) | 90 дней (автоматически) | Установлено Let's Encrypt |

### Мониторинг истечения

pfSense отображает статус сертификатов в веб-интерфейсе:

- Зелёный - сертификат действителен
- Жёлтый - срок действия истекает в ближайшие 30 дней
- Красный - сертификат истёк

Рекомендуется настроить мониторинг через SNMP или [интеграцию с Wazuh](/docs/pfsense/pfsense-wazuh-integration/) для автоматического оповещения об истекающих сертификатах.

## Устранение неполадок

### Ошибка "Certificate chain is incomplete"

Проблема возникает, когда клиент не может построить цепочку доверия от серверного сертификата до корневого CA.

Решение:

1. Убедиться, что CA-сертификат установлен на клиентском устройстве
2. При использовании промежуточного CA - убедиться, что вся цепочка (промежуточный + корневой CA) передаётся клиенту
3. Проверить, что в настройках сервиса указан корректный CA

### Ошибка "Certificate has expired"

Сертификат с истекшим сроком действия отклоняется клиентами и сервисами.

Решение:

1. Создать новый сертификат с актуальными сроками
2. Заменить сертификат во всех сервисах, которые его используют
3. Перезапустить сервисы для применения нового сертификата

### Ошибка "NET::ERR_CERT_AUTHORITY_INVALID"

Браузер не доверяет CA, выдавшему сертификат.

Решение для внутреннего CA:

1. Экспортировать CA-сертификат из pfSense
2. Установить его в хранилище доверенных корневых сертификатов операционной системы или браузера
3. Перезапустить браузер

### OpenVPN не принимает сертификат

Проблема может быть вызвана несколькими причинами:

- Тип сертификата (Server/User) не соответствует роли в VPN
- Сертификат подписан CA, отличным от указанного в настройках OpenVPN
- Сертификат отозван через CRL

Для диагностики следует проверить логи OpenVPN в **Status > System Logs**, вкладка **OpenVPN**.

## Примечания по миграции

При миграции с другого межсетевого экрана или при обновлении pfSense следует учитывать:

- Экспортировать все CA, сертификаты и CRL до миграции
- Сертификаты экспортируются в формате PEM через значок загрузки в Certificate Manager
- Закрытые ключи экспортируются отдельно и должны храниться в защищённом месте
- После импорта необходимо заново привязать сертификаты к сервисам (OpenVPN, IPsec, Web GUI)
- Резервная копия конфигурации pfSense включает все сертификаты и ключи - при [восстановлении из бэкапа](/docs/pfsense/backup/pfsense-backup-recovery/) повторный импорт не требуется

## Связанные разделы

- [VPN - OpenVPN](/docs/pfsense/vpn/openvpn/) - настройка OpenVPN с использованием сертификатов
- [Управление пользователями](/docs/pfsense/users/pfsense-user-management/) - привязка сертификатов к учётным записям пользователей
- [Бэкап и восстановление](/docs/pfsense/backup/pfsense-backup-recovery/) - резервное копирование конфигурации, включая сертификаты

