Python Selenium – Как Указать Сертификат Клиента Для Использования В Клиентской Аутентификации Ssl

Python Selenium - Как Указать Сертификат Клиента Для Использования В Клиентской Аутентификации Ssl Сертификаты

Что такое ssl-сертификат?

SSL (Secure Sockets Layer) — это стандартный протокол безопасности для установления безопасного соединения между сервером и клиентом, который является браузером.

Сертификат SSL (Secure Socket Layer) обеспечивает безопасное преобразование данных через сервер и клиентское приложение, используя строгий стандарт шифрования или цифровую подпись. Нужно установить сертификат SSL или сертификат подписи кода.

В этом уроке вы узнаете

Python selenium – как указать сертификат клиента для использования в клиентской аутентификации ssl

Я просмотрел все возможные ключи во всех json файлах, основываясь на ответе в Python Selenium – Какие возможные ключи в настройках профиля Firefox FireFox, но я не мог” t найдите ключ, чтобы указать сертификат клиента для использования в моем SSL-соединении.

Я исследовал это, но я не смог найти точный ответ. Я обнаружил, что нам нужно добавить сертификат в профиль FireFox на основе ответа в Как импортировать SSL-сертификаты для Firefox с Selenium [на Python]?, но я здесь я не могу понять, как именно этот сертификат нужно добавить.

Обратите внимание, что я не говорю о доверении сертификату сервера. По умолчанию при запуске SSL-подключения в качестве сертификата клиента используется локальный сертификат, назначенный вашей рабочей станции. Здесь мне нужно использовать новую пару сертификата/частного ключа для моего SSL-соединения. Мне нужно сделать это, чтобы проверить аутентификацию клиента в SSL.

Итак, в общем, я ищу некоторую конфигурацию, которая выглядит так:

profile.add_client_cert(path_to_cert)
profile.add_private_key(path_to_private_key)

Я нашел пару файлов, которые могут быть тем, что мне нужно настроить, но не знаю, как добавить сертификат и ключи к этим файлам, cert8.db и key3.db. Я нашел эти файлы в каталоге профиля FireFox.

Я искал исходный код селена, но не смог найти ответ:
https://github.com/SeleniumHQ/selenium/search?utf8=✓&q=cert

Базовый класс


До начала написания самих автоматизированных тестов вначале нам необходимо создать вспомогательные классы.

В тестовом проекте добавим новый класс и назовем его

SeleniumTestBase.cs

(можно и по-другому). Объявим этот класс как

public abstract

, так как именно от этого класса будут наследоваться в дальнейшем все тестовые классы. Также к классу необходимо добавить атрибут

[TestFixture]

, что обозначает класс как тест-класс. В данном классе объявляются те поля и методы, которые необходимы для прохождения любого теста.


В этом классе обязательно объявляем поле:

protected IWebDriver Driver

; — это экземпляр драйвера браузера, который создается перед прогоном теста(-ов). Существует 4 вида драйверов ( несколько в стадии разработки): FirefoxDriver, InternetExplorerDriver, ChromeDriver, HtmlUnitDriver (кроссплатформенный виртуальный браузер без графической составляющей).

Также в классе объявим 4 метода (хотя некоторые могут быть пустыми илии не определятся вообще):public void TestInitialize() с атрибутом [TestFixtureSetUp] – метод с данным атрибутом будет вызываться один раз перед прогоном тестов из какого-либо тестового класса (если классов несколько, то метод будет вызываться перед тестами из первого класса, потом перед методами второго класса и так далее).

public void TestCleanup() с атрибутом [TestFixtureTearDown] – принцип работы как у предыдущего метода, но только после прогона тест-класса. В данном классе желательно закрыть драйвер браузера, так как при прогоне следующего тест-класса обязательно создастся новый экземпляр драйвера браузера (в итоге могут остаться открытыми многие экземпляры драйвера браузера, а оперативная память не резиновая):Driver.Quit();

public void OneTearDown() с атрибутом [TearDown] – метод вызывается после прогона каждого отдельного теста. В этом методе, например, можно почистить куки браузера перед каждым новым тестом:Driver.Manage().Cookies.DeleteAllCookies();

Про сертификаты:  Получение и установка сертификата ЭП КАП

public void OneSetUp() с атрибутом [SetUp] – метод вызывается перед прогоном каждого отдельного теста. Например, можно разворачивать окно браузера на весь экран при прогоне теста (неактуально для HtmlUnitDriver):Driver.Manage().Window.Maxmize();

Дополнительная информация


Наиболее быстрым драйвером браузера считается ChromeDriver. Угадайте самый медленный.

Запуск тестов

Чтобы прогнать наши тесты, нам необходима специально созданная для этого программа –

NUnit

(ссылка на скачивание в начале документа).

Скомпилируем наш тестовый проект. На выходе мы имеем файл типа .dll


Запустим NUnit. Далее нажмем File-Open Project. Появится окно, в котором мы должны найти и выбрать только что скомпилированную библиотеку.

После загрузки библиотеки в программу, слева мы увидим дерево тест-классов с нашими тестами. В этом дереве можно выбрать отдельный тест, класс или все классы тестов, после чего нажать кнопку Run – и тесты начнут прогоняться. Прогон можно в любой момент остановить, нажав кнопку Stop.

После прохождения тестов, их цвет будет меняться в дереве: зеленый – тест прошел, красный – тест упал, желтый – тест не пройдет по каким-либо причинам (не падение), серый – тест еще не запускался. Под кнопками находится окошко с логом упавших тестов, по которому можно выяснить, почему упал тот или иной тест.

Как бороться с сертификатами с использованием selenium?

Я использую селен для запуска браузера. Как я могу справиться с веб-страницами (URL), которые попросят браузер принять сертификат или нет?

в Firefox у меня может быть такой сайт, который просит меня принять его сертификат следующим образом:

Firefox

в браузере Internet Explorer я могу получить что-то вроде этого:

Enter image description here

В Google Chrome:

Google Chrome

повторяю вопрос: как я могу автоматизировать принятие сертификата веб-сайта при запуске браузера (Internet Explorer, Firefox и Google Chrome) с Selenium (язык программирования Python)?

Как обработать ошибку сертификата ssl с помощью selenium webdriver

Предположим, что мы написали несколько тестовых сценариев и, выполняя сценарий, мы обнаружили в ситуации «Ненадежное соединение» выше, как мы обрабатываем исключение исключительно посредством автоматизации.

В таком случае мы должны настроить наш скрипт таким образом, чтобы он сам позаботился об исключении SSL.

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

Требуемые возможности используются для настройки экземпляра драйвера Selenium Webdriver. С помощью желаемых возможностей можно настроить все экземпляры драйверов, такие как ChromeDriver, FirefoxDriver и Internet Explorer.

На данный момент у нас нет конкретного URL для создания вышеуказанного сценария, но я предоставляю шаги, которые мы можем добавить в сценарий Selenium для обработки описанной выше ситуации «Ненадежное соединение».

Как проверяются сертификаты ssl

SSL работает через комбинацию программ и процедуры шифрования / дешифрования, которые существуют на компьютере веб-сервера и в браузере веб-сервера.

SSL-сертификат в основном содержит нижеприведенную информацию.

  1. Тема, которая является личностью владельца сайта.
  2. Достоверность информации — открытый и закрытый ключи.

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

Если из-за сертификата не установлено безопасное соединение между сервером и клиентом, появится следующая ошибка сертификата SSL.

Настройка среды разработки

Для написания автоматизированных тестов необходимо создать новый проект типа

Class Library

(можно создать и консольное приложение, но не в нашем случае). Желательно дать ему название, которое ассоциируется с названием тестируемого проекта. Также, желательно создать тестовый проект в самом солюшене с тестируемым проектом.

После создания тестового проекта к нему необходимо подключить 3 специальные библиотеки для тестов:

Про сертификаты:  Посольство и консульства сшав российской федерации

NUnit (nunit.framework)

– библиотека для непосредственного прогона автоматизированных тестов (не только для Selenium);

WebDriver WebDriver.Support

– непосредственно библиотеки Selenium’a.


Подключить библиотеки к тестовому проекту можно через NuGet или вручную, скачав последнюю версию с сайта

Обёртка

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

static class Wrapper

, в который и выносим в отдельные методы дублирование кода.

Большинство тестов будут начинаться с одной и той же строчки кода:

Driver.Navigate().GoToUrl(<урл>);


Поэтому логично в классе Wrapper определить поле

private static string _domain

, в котором пропишем нужный нам урл, а также метод для получения этого урла:

Разница между Wrapper.cs и SeleniumTestBase.cs в том, что в первом объявляются методы, которые вызываются внутри тестов (и даже внутри SeleniumTestBase), а во втором – методы, которые вызываются до или после тестов.После создания вспомогательных тестов уже создаем обычные тестовые классы.

Таким образом, архитектура тестового проекта выглядит так:
Python Selenium - Как Указать Сертификат Клиента Для Использования В Клиентской Аутентификации Ssl

Обработка ошибок сертификата ssl в firefox

Для обработки ошибки сертификата SSL в Firefox нам нужно использовать требуемые возможности Selenium Webdriver и выполнить следующие шаги.

Шаг 1) : Сначала нам нужно создать новый профиль Firefox с именем « myProfile ». Вы можете обратиться к Google, чтобы узнать «Как создать» профиль Firefox. Это просто и легко.

Шаг 2) : Теперь откройте myProfile в скрипте, как показано ниже, и создайте объект FirefoxProfile.

ProfilesIni prof = new ProfilesIni()				
FirefoxProfile ffProfile= prof.getProfile ("myProfile")

Шаг 3) : Теперь нам нужно установить свойства « setAcceptUntrustedCertificates » и « setAssumeUntrustedCertificateIssuer » в профиле Fire Fox.

ffProfile.setAcceptUntrustedCertificates(true) 
ffProfile.setAssumeUntrustedCertificateIssuer(false)

Шаг 4) : теперь используйте профиль FireFox в объекте драйвера FireFox.

WebDriver driver = new FirefoxDriver (ffProfile) 		

Примечание . «SetAcceptUntrustedCertificates» и «setAssumeUntrustedCertificateIssuer » являются возможностями для обработки ошибок сертификата в веб-браузерах.

Обработка ошибок сертификата ssl в ie

В отличие от обработки SSL-сертификатов в браузере Chrome и Firefox, в IE вам, возможно, придется обрабатывать его с помощью JavaScript.

Для обработки SSL-сертификата в IE вы можете справиться с этой ситуацией двумя способами:

  1. При этом вы перейдете по ссылке « Перейти на этот сайт (не рекомендуется)». Далее мы увидим, как обрабатывать ошибки SSL в IE.

Заметив ошибку сертификата SSL в браузере IE, вы найдете ссылку «Перейти на этот сайт (не рекомендуется)». Эта ссылка имеет идентификатор «переопределить ссылку». Вы можете просмотреть идентификатор в режиме HTML с помощью F12.

Нажмите на ссылку, используя метод driver.navigate () с JavaScript, как показано ниже: —

driver.navigate ().to ("javascript:document.getElementById('overridelink').click()");
  1. Второй метод очень похож на Chrome SSL Handling code
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
System.setProperty("webdriver.ie.driver","IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver(capabilities);

Приведенный выше код поможет обработать ошибку сертификата SSL в IE.

Резюме:

  • SSL (Secure Sockets Layer) — это стандартный протокол безопасности для установления безопасного соединения между сервером и клиентом.
  • Браузер и сервер используют механизм SSL-сертификатов, чтобы установить безопасное соединение.
  • SSL работает через комбинацию программ и процедуры шифрования / дешифрования, которые существуют на компьютере веб-сервера и в браузере веб-сервера.
  • Если между сервером и клиентом не установлено безопасное соединение из-за сертификата, возникнет ошибка сертификата SSL
  • Нужно настроить наш скрипт таким образом, чтобы он самостоятельно позаботился об исключении / ошибке SSL через веб-драйвер Selenium.

Подготовка

Для разработки автоматизированных тестов с использованием Selenium нам необходимы следующие компоненты:

Среда разработки, в нашем случае Visual Studio;

Преимущества ssl-сертификата

Есть ряд преимуществ использования SSL-сертификата, таких как,

  • Можно повысить доверие своих пользователей и клиентов, чтобы быстро увеличить рост бизнеса.
  • Эти сертификаты помогают защитить онлайн-транзакции и конфиденциальную информацию клиентов, такую ​​как данные кредитной или дебетовой карты и т. Д.
  • Подписание сертификата имеет тенденцию получать максимальное количество скачиваний и хорошие отзывы от пользователей.
Про сертификаты:  Сертификат соответствия пожарным нормам на клапаны ДМУ, ДМУ-АВ, ДМУ-МС (с 20.01.2020)

Пример написания теста

Создадим новый тестовый класс и назовем его TestClass1.cs. Вначале напишем простенький код теста, далее объясним, что какая строка кода делает.

[Test]

– атрибут, который определяет, что данный метод является тестовым.

Timeot(int millSec)

– работает только вместе с атрибутом Test – указывает максимально допустимое количество миллисекунд на прохождение теста. Если таймаут превышен, тест падает сразу (даже во время выполнения) и считается непройденным.

public void

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

Driver.Navigate().GoToUrl(Wrapper.GetUrl())

— драйвер браузера откроет нам страничку Яндекса.

Assert.IsTrue(Driver.Title == «Яндекс»)

— непосредственная проверка, в данном случае тест проверяет, что тайтл странички есть «Яндекс», в этом случае тест считается пройденным, иначе тест не пройден.

Советы


В написании автоматизированных тестов следует придерживаться концепции

AAA – Arrange-Act-AssertArrange

– необходимые настройки и действия перед самим тестом;

Act

– непосредственно тест;

Assert

– блок проверки условий типа «ожидаемый результат == текущий результат».


Возьмем пример выше, немного его переписав:

Здесь Arrange – это переход по урлу, Act – вычисление титла страница, Assert – проверка условия «ожидаемый результат == текущий результат».

Для удобства чтения тест можно переписать так:

Возьмите в привычку: один тест – один Assert. Желательно не нарушать совсем или нарушать в крайних случаях (при большом количестве проверок в тесте читабельность кода снижается).

Многие селекторы в коде могут повторяться по нескольку раз. Лучше их выносить в отдельные строковые константы, так как верстка сайта может постоянно меняться, а вместе с ней и селекторы. Тогда при изменении селектора его придется менять лишь в одном месте, а не в 20-ти местах по всему проекту.

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

По стандартам качества, таймаут на загрузку страницы в браузере равен 10 секунд. Ставьте таймаут по поиску элемента на странице в 11 секунд (максимум 12).

С некоторыми элементами на странице невозможно взаимодействовать при помощи Selenium C#. В данном случае следует использовать JavaScript JQuery для доступа к таким элементам страницы. Пример:

Для удобства прогона тестов (NUnit не самая удобная вещь) можно дополнительно установить в Visual Studio плагин ReSharper, который с легкостью позволяет запускать тесты, а также смотреть результаты прогона. Но в отличие от NUnit, ReSharper – платное дополнение.

Типы ssl-сертификатов

Браузер и сервер используют механизм SSL-сертификатов, чтобы установить безопасное соединение. Это соединение включает проверку трех типов сертификатов.

  • корень
  • промежуточный
  • Сертификат сервера

Процесс получения SSL-сертификата

Процесс получения SSL-сертификата включает в себя следующие шаги:

  1. Сначала необходимо создать запрос CSR (создать запрос на подпись сертификата).
  2. Запрос CSR создает файл данных CSR, который отправляется эмитенту сертификата SSL, известному как CA (центр сертификации).
  3. CA использует файлы данных CSR для создания SSL-сертификата для вашего сервера.
  4. Получив сертификат SSL, вы должны установить его на свой сервер.
  5. Также необходимо установить промежуточный сертификат, который связывает ваш SSL-сертификат с корневым сертификатом CA.

На изображении ниже представлены все три сертификата — корневой, промежуточный и серверный.

Заключение

Данную статью, к сожалению, нельзя считать руководством по написанию Selenium-тестов, так как здесь не описаны методы и способы тестирования Web-приложений. В частности, класс Assert для проверки условий и Selenium-методы поиска элементов на Web-странице. Этому будет посвящена другая статья.

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

Спасибо за внимание!

Оцените статью
Мой сертификат
Добавить комментарий