Работа с сертификатами

Protractor — это инструмент для энд-ту-энд тестирования приложений на Angular и других веб-приложений. Одной из важных задач при автоматизации является корректная работа с HTTPS-сайтами, особенно если они используют самоподписанные сертификаты или сертификаты корпоративного удостоверяющего центра. В этой статье рассматриваются методы управления сертификатами в Protractor на уровне конфигурации и кода тестов.


Игнорирование ошибок сертификатов

В реальных проектах часто встречаются тестовые окружения с самоподписанными сертификатами, которые браузеры по умолчанию блокируют. Для обхода этой проверки используется настройка WebDriver:

exports.config = {
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: ['--ignore-certificate-errors']
    }
  }
};

Ключевой момент — использование флага --ignore-certificate-errors, который позволяет Chrome продолжить работу, не выдавая предупреждений. Для Firefox применяется аналогичная настройка:

exports.config = {
  capabilities: {
    browserName: 'firefox',
    'moz:firefoxOptions': {
      args: ['-ignore-certificate-errors']
    }
  }
};

Игнорирование ошибок сертификатов подходит только для тестовой среды и не должно применяться в продакшн-тестах.


Использование собственного сертификата клиента

Некоторые приложения требуют аутентификацию через клиентский сертификат (mutual TLS). Protractor позволяет передавать такие сертификаты через ChromeOptions или Firefox Profile:

const path = require('path');

exports.config = {
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: [
        `--client-certificate-file=${path.resolve(__dirname, 'certs/client.p12')}`,
        '--client-certificate-password=yourpassword'
      ]
    }
  }
};

В Firefox клиентский сертификат подключается через профиль:

const firefox = require('selenium-webdriver/firefox');
const profile = new firefox.Profile();
profile.setPreference('security.default_personal_cert', 'Select Automatically');

exports.config = {
  capabilities: {
    browserName: 'firefox',
    'moz:firefoxOptions': {
      profile: profile
    }
  }
};

Важно: Пароль к сертификату передается в коде либо через переменные окружения для безопасности.


Работа с сертификатами на уровне WebDriver

Иногда необходимо более тонкое управление SSL-соединением. WebDriver позволяет настраивать свои возможности через acceptInsecureCerts:

exports.config = {
  capabilities: {
    browserName: 'chrome',
    acceptInsecureCerts: true
  }
};

Параметр acceptInsecureCerts действует на уровне протокола WebDriver и работает с любыми браузерами, поддерживающими эту опцию. Это более универсальный способ, чем использование флагов через chromeOptions или профиль Firefox.


Обход предупреждений браузера

Даже при использовании acceptInsecureCerts иногда браузеры показывают страницу предупреждения (например, Chrome “Your connection is not private”). Для автоматизации тестов можно применять следующий подход:

browser.ignoreSynchronization = true; // для не-Angular страниц
browser.get('https://example.com');
browser.switchTo().alert().accept(); // обработка всплывающих предупреждений

Этот метод позволяет продолжать выполнение тестов после появления предупреждений, не прерывая сценарий.


Импорт сертификатов в систему

Для более сложных сценариев корпоративного тестирования часто используют импорт сертификатов в системное хранилище. Например, на Windows сертификат можно добавить через MMC, на Linux — через update-ca-certificates. После этого браузеры автоматически доверяют сертификату, и тесты запускаются без дополнительных настроек в Protractor.


Примеры интеграции в CI/CD

При автоматическом прогоне тестов в CI/CD важно, чтобы тестовый сервер корректно принимал самоподписанные сертификаты. Один из подходов:

  1. Скопировать сертификат в контейнер или агент сборки.
  2. Добавить сертификат в доверенное хранилище браузера или системы.
  3. Установить флаги --ignore-certificate-errors и acceptInsecureCerts: true для надежного обхода предупреждений.

Такой подход гарантирует стабильное выполнение тестов в автоматизированной среде без ручного вмешательства.


Рекомендации по безопасности

  • Никогда не использовать игнорирование ошибок сертификатов в продакшн-сценариях.
  • Хранить клиентские сертификаты и пароли в защищенных хранилищах или переменных окружения.
  • Для повторного использования сертификатов применять централизованное управление в CI/CD, а не жестко прописывать пути в коде.

Эти практики позволяют обеспечить корректное тестирование HTTPS-приложений в Protractor с минимальными рисками и максимальной надежностью.