Работа с самоподписанными сертификатами

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

Проблемы с самоподписанными сертификатами

Самоподписанный сертификат — это сертификат, который не был выдан доверенным центром сертификации (CA). Браузеры и другие клиентские приложения обычно не доверяют таким сертификатам по умолчанию, что приводит к ошибкам, например, предупреждениям о безопасности.

При автоматизированном тестировании с использованием WebdriverIO браузер будет блокировать доступ к страницам с самоподписанными сертификатами, так как они считаются небезопасными. Чтобы успешно провести тестирование таких страниц, необходимо настроить WebdriverIO так, чтобы он игнорировал предупреждения о безопасности, связанные с сертификатами.

Настройка WebdriverIO для работы с самоподписанными сертификатами

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

Настройка WebdriverIO для Chrome

Для браузера Chrome можно настроить параметр acceptInsecureCerts в конфигурации WebdriverIO. Этот параметр сообщает браузеру игнорировать ошибки, связанные с SSL-сертификатами, включая самоподписанные сертификаты.

Пример конфигурации для WebdriverIO с Chrome:

exports.config = {
  capabilities: [
    {
      browserName: 'chrome',
      'goog:chromeOptions': {
        args: [
          '--headless', // Режим без интерфейса (по желанию)
          '--disable-gpu',
          '--no-sandbox',
        ],
      },
      acceptInsecureCerts: true, // Игнорировать самоподписанные сертификаты
    },
  ],
};
Настройка WebdriverIO для Firefox

Для Firefox настройка аналогична, только с использованием FirefoxOptions. В случае с Firefox необходимо установить флаг acceptInsecureCerts в значение true, чтобы браузер принимал самоподписанные сертификаты.

Пример конфигурации для WebdriverIO с Firefox:

exports.config = {
  capabilities: [
    {
      browserName: 'firefox',
      'moz:firefoxOptions': {
        args: [
          '--headless', // Режим без интерфейса
        ],
      },
      acceptInsecureCerts: true, // Игнорировать самоподписанные сертификаты
    },
  ],
};

Установка сертификата вручную

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

Установка сертификата в Chrome

Для Chrome процесс установки сертификата следующий:

  1. Загрузите сертификат с сайта.
  2. Откройте настройки браузера, перейдите в раздел “Конфиденциальность и безопасность” → “Безопасность”.
  3. Выберите “Управление сертификатами” и добавьте загруженный сертификат в доверенные корневые центры сертификации.
Установка сертификата в Firefox

Для Firefox процесс аналогичен:

  1. Загрузите самоподписанный сертификат.
  2. Откройте настройки Firefox, перейдите в раздел “Приватность и безопасность” → “Сертификаты” → “Просмотр сертификатов”.
  3. В разделе “Доверенные корневые центры сертификации” добавьте ваш сертификат.

После установки сертификата в доверенные, WebdriverIO будет воспринимать сайт как безопасный, и тесты смогут выполняться без ошибок.

Проверка сертификата через WebdriverIO

В некоторых случаях важно убедиться, что самоподписанный сертификат действительно используется на странице. В WebdriverIO можно получить информацию о сертификате через API браузера. Например, в Chrome можно получить данные сертификата через проксирование запросов.

Пример получения сертификата через WebdriverIO:

browser.url('https://example.com');
const cert = await browser.execute(() => {
  return window.location.protocol;
});

console.log(cert);  // Выведет информацию о протоколе (https или http)

Таким образом, можно проверять, что страница действительно использует защищённое соединение с самоподписанным сертификатом.

Управление сертификатами в WebdriverIO через DevTools

В случае работы с Chrome DevTools можно использовать API для манипулирования сертификатами и обработки ошибок безопасности. Встроенные функции WebdriverIO позволяют обращаться к DevTools, управлять подключениями и обрабатывать предупреждения безопасности.

Пример работы с DevTools для управления сертификатами:

const devTools = await browser.getDevToolsSession();
await devTools.send('Security.setOverrideCertificateErrors', { override: true });

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

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

  1. Не используйте самоподписанные сертификаты в продакшн-средах: Самоподписанные сертификаты подходят только для тестирования. В реальной рабочей среде необходимо использовать сертификаты, выданные доверенными центрами сертификации.
  2. Используйте локальные тестовые серверы: Для тестирования на самоподписанных сертификатах рекомендуется использовать локальные серверы, чтобы избежать рисков для безопасности и производительности.
  3. Заключение на тестировании: Важно помнить, что автоматизация тестирования с самоподписанными сертификатами может привести к недостоверным результатам в продакшн-средах. Необходимо тщательно тестировать как с самоподписанными, так и с доверенными сертификатами для обеспечения стабильности и безопасности приложения.

Заключение

Настройка WebdriverIO для работы с самоподписанными сертификатами требует внимания к деталям, особенно в контексте безопасности и взаимодействия с различными браузерами. Использование параметра acceptInsecureCerts позволяет значительно упростить тестирование, исключив блокировки, связанные с сертификатами. Важно учитывать, что такие настройки должны применяться исключительно в тестовых средах, в реальной эксплуатации предпочтительны сертификаты, выданные доверенными центрами сертификации.