Установка сертификата на локальную машину для n8n

Установка сертификата на локальную машину для n8n

Работа с локальной инсталляцией n8n по протоколу HTTPS требует наличия SSL/TLS сертификата, доверенного вашей операционной системой и браузером. Использование самоподписанного сертификата без его установки в хранилище доверенных корневых сертификатов приводит к появлению предупреждений безопасности, которые могут блокировать автоматические запросы из n8n к локальным ресурсам. Данная статья детально описывает процесс создания, настройки и установки такого сертификата на различные операционные системы.

Генерация самоподписанного SSL сертификата

Первым шагом является создание самоподписанного сертификата. Рекомендуется использовать инструмент OpenSSL. Ниже приведена последовательность команд для генерации сертификата, действительного 365 дней, с ключом RSA длиной 2048 бит.

    • Создание приватного ключа: openssl genrsa -out n8n.key 2048
    • Создание запроса на подпись сертификата (CSR). При запросе Common Name (CN) критически важно указать имя хоста или IP-адрес, по которому будет доступен n8n (например, localhost, 192.168.1.10, n8n.local): openssl req -new -key n8n.key -out n8n.csr
    • Генерация самоподписанного сертификата (X509): openssl x509 -req -days 365 -in n8n.csr -signkey n8n.key -out n8n.crt
    • Для некоторых конфигураций (например, Docker) может потребоваться объединение ключа и сертификата в один файл .pem: cat n8n.crt n8n.key > n8n.pem

    В результате вы получите файлы: n8n.key (закрытый ключ, должен храниться в секрете) и n8n.crt (публичный сертификат, который будет устанавливаться на локальную машину).

    Настройка n8n для использования SSL сертификата

    Существует несколько основных способов запуска n8n: напрямую через npm, с помощью Docker Compose или используя готовые образы. Конфигурация для каждого из них отличается.

    Запуск через npm или бинарный файл

    При запуске n8n через npm или скачанный бинарный файл, используйте переменные окружения или аргументы командной строки.

    • Установите переменные окружения перед запуском:
      • N8N_PROTOCOL=https
      • N8N_SSL_KEY=/полный/путь/к/n8n.key
      • N8N_SSL_CERT=/полный/путь/к/n8n.crt
    • Либо запустите n8n с флагами: n8n start --protocol=https --ssl-key=/путь/к/n8n.key --ssl-cert=/путь/к/n8n.crt

    Запуск через Docker Compose

    Наиболее распространенный метод. Поместите файлы n8n.crt и n8n.key в папку, например, ssl/, рядом с файлом docker-compose.yml. Пример конфигурации docker-compose.yml:

    
    version: '3.8'
    
    services:
      n8n:
        image: n8nio/n8n
        container_name: n8n
        restart: unless-stopped
        ports:
          - "5678:5678"
        environment:
          - N8N_PROTOCOL=https
          - N8N_SSL_KEY=/etc/ssl/n8n.key
          - N8N_SSL_CERT=/etc/ssl/n8n.cert
          - N8N_HOST=localhost
        volumes:
          - n8n_data:/home/node/.n8n
          - ./ssl/n8n.key:/etc/ssl/n8n.key:ro
          - ./ssl/n8n.crt:/etc/ssl/n8n.cert:ro
    volumes:
      n8n_data:
    
    

    Установка сертификата в хранилище доверенных корневых сертификатов

    После настройки n8n браузер и ОС все еще не будут доверять вашему сертификату. Его необходимо добавить в доверенное хранилище.

    Установка на Windows

    1. Скопируйте файл n8n.crt на компьютер Windows.
    2. Нажмите Win + R, введите certlm.msc и нажмите Enter. Откроется диспетчер сертификатов для локальной машины.
    3. В дереве консоли перейдите в Доверенные корневые центры сертификации -> Сертификаты.
    4. В правой панели щелкните правой кнопкой мыши на папке «Сертификаты», выберите «Все задачи» -> «Импорт».
    5. Запустится мастер импорта. Укажите путь к файлу n8n.crt.
    6. Поместите сертификат в хранилище «Доверенные корневые центры сертификации». Завершите мастер.
    7. Перезапустите браузер. Предупреждение о безопасности должно исчезнуть.

    Установка на macOS

    1. Скопируйте файл n8n.crt на Mac.
    2. Откройте приложение «Связка ключей» (Keychain Access).
    3. В верхнем меню выберите «Файл» -> «Импортировать элементы».
    4. Выберите ваш файл n8n.crt.
    5. В списке связок выберите «система» (System). Найдите импортированный сертификат (обычно по имени, которое вы указали в CN).
    6. Дважды щелкните по нему, чтобы открыть детали. В разделе «Доверие» (Trust) раскройте меню «При использовании этого сертификата» и выберите «Всегда доверять».
    7. Закройте окно, введите пароль администратора для сохранения изменений.
    8. Перезапустите браузер.

    Установка на Linux (Ubuntu/Debian)

    1. Скопируйте сертификат в папку с локальными сертификатами: sudo cp n8n.crt /usr/local/share/ca-certificates/
    2. Обновите хранилище сертификатов: sudo update-ca-certificates
    3. Вы должны увидеть сообщение: «1 added, 0 removed; done.»
    4. Для применения изменений в браузерах может потребоваться их полная перезагрузка или перезапуск системы. Браузеры на основе Chromium и Firefox используют системное хранилище.

    Решение проблем с Node.js и инструментами командной строки

    Даже после установки сертификата в ОС, приложения на Node.js (например, скрипты или сам n8n при выполнении HTTP-запросов) могут по-прежнему отвергать его. Для решения этой проблемы необходимо указать Node.js использовать системное хранилище сертификатов или явно добавить ваш сертификат.

    • Установите переменную окружения NODE_EXTRA_CA_CERTS, указав путь к вашему n8n.crt файлу. Это самый чистый способ.
      • Linux/macOS: export NODE_EXTRA_CA_CERTS=/полный/путь/к/n8n.crt
      • Windows (PowerShell): $env:NODE_EXTRA_CA_CERTS="C:полныйпутькn8n.crt"

      Добавьте эту переменную в переменные окружения вашей системы или в скрипт запуска n8n.

    • Альтернативно, для разового запуска n8n или скрипта используйте флаг Node.js: node --use-openssl-ca ... (поведение зависит от версии) или явно передавайте CA в настройках HTTPS-агента при выполнении запросов.

    Особые случаи и расширенная настройка

    Использование доменного имени в локальной сети

    Если вы хотите обращаться к n8n не по localhost, а по доменному имени (например, n8n.mycompany.local), необходимо:

    1. Указать это имя в поле Common Name (CN) и, что критически важно, в поле Subject Alternative Name (SAN) при генерации сертификата. Для этого потребуется файл конфигурации OpenSSL (openssl.cnf) с секцией [v3_req] и параметром subjectAltName = DNS:n8n.mycompany.local.
    2. Добавить запись в файл hosts (C:WindowsSystem32driversetchosts или /etc/hosts) на каждой машине, которая будет обращаться к n8n, сопоставив IP-адрес сервера с этим доменным именем.
    3. Установить сертификат, сгенерированный с SAN, в хранилище доверенных сертификатов на всех клиентских машинах.

    Настройка обратного прокси (Nginx, Apache)

    При использовании обратного прокси (например, Nginx) перед n8n, SSL-терминация происходит на прокси. В этом случае:

    1. Сертификат настраивается в конфигурации Nginx/Apache.
    2. N8n запускается по HTTP (протокол внутри сети).
    3. Устанавливать самоподписанный сертификат в хранилище нужно только если сертификат на прокси также самоподписанный. Логика установки та же, но сертификат берется с веб-сервера прокси.

    Ответы на часто задаваемые вопросы (FAQ)

    Зачем нужен HTTPS на localhost?

    Многие современные API и функции браузера (например, Service Workers, доступ к камере/микрофону) требуют безопасного контекста (HTTPS). Кроме того, если ваш workflow в n8n взаимодействует с другими локальными сервисами по HTTPS или использует OAuth-авторизацию, наличие доверенного сертификата становится обязательным.

    Браузер все еще показывает предупреждение после установки сертификата

    • Убедитесь, что вы импортировали сертификат именно в хранилище «Доверенные корневые центры сертификации» (Trusted Root Certification Authorities), а не в «Промежуточные» или «Личные».
    • Проверьте, что имя в сертификате (CN или SAN) точно соответствует адресу, который вы вводите в адресной строке браузера (localhost, IP, домен).
    • Очистите кэш SSL в браузере (в Chrome: chrome://net-internals/

      hsts).

    • Полностью закройте и снова откройте браузер.
    • На Windows убедитесь, что вы использовали certlm.msc (для компьютера), а не certmgr.msc (для пользователя).

Как сделать сертификат доверенным для приложений на Node.js?

Используйте переменную окружения NODE_EXTRA_CA_CERTS, как описано выше. Это предпочтительный метод. Убедитесь, что путь к файлу абсолютный и файл доступен для чтения процессом Node.js.

Можно ли использовать Let’s Encrypt для локального n8n?

Да, но с существенными ограничениями. Let’s Encrypt выдает сертификаты только для публичных доменных имен, которые могут быть верифицированы. Для локальной сети это можно организовать с помощью DNS-записи TXT и плагина certbot DNS challenge, либо используя домен с перенаправлением на ваш локальный IP. Однако для большинства локальных сценариев самоподписанный сертификат с последующей установкой в хранилище является более простым и практичным решением.

Сертификат перестал работать после истечения срока действия

Самоподписанные сертификаты имеют ограниченный срок действия (вы задали его при создании, например, 365 дней). По истечении этого срока необходимо сгенерировать новый сертификат, заменить файлы .crt и .key в папке n8n, перезапустить n8n и установить новый .crt файл в хранилище доверенных сертификатов на всех клиентских машинах, предварительно удалив старый.

Как проверить, что сертификат установлен правильно?

Откройте сайт n8n в браузере (Chrome, Edge), нажмите на значок замка в адресной строке, выберите «Сертификат» (Certificate). Во вкладке «Путь сертификации» (Certification Path) вы должны увидеть, что корневой сертификат является доверенным, а статус должен гласить «Этот сертификат является корректным».

Разница между установкой для текущего пользователя и для локального компьютера

Установка сертификата для «текущего пользователя» (через certmgr.msc) применяется только к профилю этого пользователя в Windows. Установка для «локального компьютера» (через certlm.msc) применяется ко всем пользователям на этом ПК, а также к системным службам. Для сервера с n8n рекомендуется установка для локального компьютера.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *