Як працювати з сертифікатом SSL в Selenium

⚡ Розумний підсумок

Помилки SSL-сертифіката зупиняють Selenium тестувати момент, коли браузер відхиляє ненадійний або прострочений сертифікат, тому кожен скрипт WebDriver потребує специфічної для браузера можливості, яка приймає сертифікат і дозволяє автоматизації продовжувати роботу.

  • 🔘 Визначення: SSL шифрує трафік між браузером і сервером, а сертифікат підтверджує ідентичність сервера.
  • ☑️ Тригер помилки: Браузери блокують ненадійні, термін дії яких минув, відкликані або самопідписані сертифікати та відображають сторінку попередження.
  • ✅ Firefox: A Firefox Профіль встановлює значення setAcceptUntrustedCertificates та setAssumeUntrustedCertificateIssuer перед запуском драйвера.
  • 🧪 Chrome: DesiredCapabilities з ACCEPT_SSL_CERTS приймає сертифікат на Selenium 2 і Selenium 3.
  • 🛠️ Internet Explorer: A JavaКлацання скрипта на елементі overridelink пропускає сторінку попередження.
  • ⚠️ Selenium 4: setAcceptInsecureCerts у ChromeOptions, FirefoxOptions або EdgeOptions замінює DesiredCapabilities.

Як працювати з сертифікатом SSL в Selenium

Сертифікат SSL в Selenium

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

SSL-сертифікат захищає дані, що передаються між сервером і клієнтською програмою, за допомогою надійного шифрування та цифрового підпису. Власник сайту встановлює або SSL-сертифікат, або сертифікат підпису коду.

Переваги сертифіката SSL

Існує ряд переваг використання сертифіката SSL, наприклад,

  • Можна підвищити довіру користувачів і клієнтів, щоб прискорити зростання бізнесу
  • Ці сертифікати допомагають захистити онлайн-транзакції та конфіденційну інформацію клієнтів, як-от дані кредитної/дебетової картки тощо.
  • Сертифікат підпису, як правило, отримує максимальну кількість завантажень і хороші відгуки від користувачів.

Веб-сайти, захищені SSL, починаються з https:// і ви можете побачити значок замка або зелений адресний рядок, якщо з’єднання надійно встановлено.

Наприклад, якщо ви хочете здійснити певну транзакцію через мережевий банкінг або придбати a Mobile телефон через сайт електронної комерції, наприклад Flipkart або Amazon.

Що відбувається між веб-браузером і сервером

  1. Браузер намагається підключитися до веб-сайту, захищеного SSL. Браузер просить веб-сервер ідентифікувати себе
  2. Сервер надсилає браузеру копію свого SSL-сертифікату
  3. Браузер перевіряє, чи справжній сертифікат SSL. Якщо так, він надсилає повідомлення на сервер
  4. Сервер надсилає підтвердження з цифровим підписом для початку сеансу, зашифрованого SSL
  5. Зашифровані дані передаються між сервером і браузером

Номери карток та облікові дані для входу передаються протягом цього сеансу, тому обмін має залишатися зашифрованим від початку до кінця і не може бути перехоплений.

Наприклад, замок та адресний рядок нижче підтверджують, що сертифікат прийнято.

  1. тип https://netbanking.hdfcbank.com/netbanking/ .
  2. Натисніть Enter.
  3. Ви побачите зелений адресний рядок у браузері, як показано нижче:-

Зелений адресний рядок у браузері для сторінки інтернет-банкінгу HDFC, захищеної SSL

Як сертифікат SSL створює безпечне з’єднання

Діаграма нижче tracрукостискання, а наступні пронумеровані кроки пояснюють кожен обмін.

Схема SSL-підтвердження між веббраузером та вебсервером

  1. браузер надсилає запит HTTPS на сервер.
  2. Тепер сервер повинен надати певну ідентифікацію браузеру, щоб підтвердити, що йому довіряють. Це можна зробити, надіславши копію його сертифіката SSL у браузер.
  3. Кожен браузер має власний список довірених ЦС. Браузер перевіряє корінь сертифіката зі своїм списком довірених центрів сертифікації та перевіряє, чи сертифікат не прострочений, невідкликаний і чи загальна назва дійсна для веб-сайту, до якого він підключається.
  4. Якщо браузер довіряє сертифікату, між сервером і браузером створюється зашифрований сеанс.
  5. Сервер і браузер можуть надсилати зашифровані повідомлення

Типи сертифікатів SSL

Браузер і сервер використовують механізм сертифіката SSL для встановлення безпечного з’єднання. Це підключення передбачає перевірку трьох типів сертифікатів.

  • Корінь
  • Проміжний
  • Сертифікат сервера

Процес отримання SSL-сертифікату

Процес отримання сертифіката SSL включає наступні кроки:-

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

На зображенні нижче представлені всі три сертифікати- Кореневий, проміжний і серверний сертифікати.

Ланцюжок сертифікатів, що показує кореневий, проміжний та серверний SSL-сертифікати

Як перевіряються сертифікати SSL

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

Сертифікат SSL містить наведену нижче інформацію.

  1. Суб’єкт, який є власником сайту.
  2. Інформація про дійсність - відкритий і закритий ключ.

Закритий та відкритий ключі – це два унікально пов’язані криптографічні ключі (числа). Все, що зашифровано відкритим ключем, може бути розшифровано лише закритим ключем. Браузер показує ці поля під час перевірки сертифіката, як показано нижче.

Панель відомостей про сертифікат із зазначенням теми, терміну дії та відкритого ключа

Якщо безпечне з’єднання між сервером і клієнтом не встановлено через сертифікат, з’явиться наступна помилка сертифіката SSL.

Типи помилок сертифіката SSL

Припустимо, ви вводите https-запит, а браузер відповідає: «Це з’єднання ненадійне» або «Сертифікат безпеки сайту ненадійний». Браузеру не вдалося встановити захищене з’єднання з наданим сертифікатом, тому він зупиняється та просить користувача вжити відповідних заходів.

Типи помилок, які ви можете побачити через сертифікат у різних браузерах, можуть бути приблизно такими

  1. ПожежаFox - Це з'єднання викликає підозри
  2. Google Chrome – Безпека цього сайту не є надійною
  3. Internet Explorer (IE) – Довірений центр сертифікації (CA) не довіряє цьому сертифікату безпеки, представленому цим веб-сайтом.

На скріншоті нижче показано проміжну сторінку, яку створює ненадійний сертифікат.

Сторінка попередження про ненадійне з’єднання, що відображається браузером через недійсний SSL-сертифікат

Як усунути помилку сертифіката SSL за допомогою Selenium Веб-драйвер

Припустимо тестовий скрипт потрапляє на сторінку «Ненадійне з’єднання» вище. Скрипт потрібно налаштувати так, щоб він самостійно обробляв виняток SSL, виключно через автоматизація.

Зміна залежить від використовуваного екземпляра браузера, і саме тут на допомогу приходять бажані можливості. Бажані можливості налаштовують екземпляр драйвера Selenium Вебдрайвер, включаючи ChromeDriver, FirefoxДрайвер та Internet Explorer.

Наведені нижче кроки можна додати до Selenium скрипт для очищення ситуації «Ненадійне з’єднання» для кожного браузера.

⚠️ Selenium Примітка за 4 рік: Клас DesiredCapabilities було видалено в Selenium 4. Класи параметрів браузера тепер мають однакові налаштування через єдину можливість W3C, прийняти незахищені сертифікати.

браузер Selenium 4 клас виклик
Chrome Параметри Chrome встановитиAcceptInsecureCerts(true)
Firefox FirefoxОпції встановитиAcceptInsecureCerts(true)
край EdgeOptions встановитиAcceptInsecureCerts(true)
Safari Javascriptвиконавець тимчасовий обхідний скрипт
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
WebDriver driver = new ChromeDriver(options);

Обробка помилок сертифіката SSL Firefox

Для обробки помилки сертифіката SSL у Firefox, нам потрібно використовувати бажані можливості Selenium Webdriver і виконайте наступні дії.

Крок 1) Спочатку нам потрібно створити новий Firefox профіль сказати «мій профіль».

Крок 2) Тепер перейдіть до myProfile у сценарії, як показано нижче, і створіть FirefoxОб'єкт профілю.

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

Крок 3) Тепер нам потрібно встановити властивості “setAcceptUntrustedCertificates” та “setAssumeUntrustedCertificateIssuer” у Fire. Fox профіль.

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

Крок 4) Тепер використовуйте вогоньFox профіль у ВогніFox об'єкт драйвера.

WebDriver driver = new FirefoxDriver (ffProfile)

Примітка: "setAcceptUntrustedCertificates"І"setAssumeUntrustedCertificateIssuer«є можливостями обробки помилок сертифікатів у веббраузерах».

⚠️ Примітка до версії: код на основі профілю, наведений вище, цілі Selenium 2 і Selenium 3. На Selenium 4 профіль кріпиться через FirefoxОпції та Firefox приймає незахищені сертифікати за замовчуванням.

Обробка помилок сертифіката SSL у Chrome

Для обробки помилок SSL у Chrome об'єкт DesiredCapabilities нижче приймає всі сертифікати SSL, тому користувач не бачить попередження про сертифікат під час запуску.

Нам потрібно створити екземпляр класу DesiredCapabilities, як показано нижче:-

DesiredCapabilities handlSSLErr = DesiredCapabilities.chrome ()       
handlSSLErr.setCapability (CapabilityType.ACCEPT_SSL_CERTS, true)
WebDriver driver = new ChromeDriver (handlSSLErr);

⚠️ Примітка до версії: CapabilityType.ACCEPT_SSL_CERTS належить до старого протоколу JSON Wire. Замініть його фрагментом ChromeOptions, показаним раніше під час запуску. Selenium 4.

Обробка помилок сертифіката SSL в IE

На відміну від обробки сертифікатів SSL у браузері Chrome і Firefox, в IE вам, можливо, доведеться впоратися з цим за допомогою наявність.

Щоб обробити SSL-сертифікат в IE, ви можете вирішити цю ситуацію двома способами.

Спосіб 1) Натисніть посилання «Перейти на цей веб-сайт (не рекомендується)» у проміжному вікні. Це посилання має ідентифікатор «overridelink», який ви можете перевірити на панелі HTML, відкритій за допомогою F12, як показано на скріншоті нижче.

Попередження сертифіката Internet Explorer із посиланням «Продовжити перегляд цього веб-сайту»

Натисніть на посилання за допомогою методу driver.navigate(). JavaСценарій, як показано нижче: -

driver.navigate ().to ("javascript:document.getElementById('overridelink').click()");

Спосіб 2) Другий метод досить схожий на код обробки SSL у Chrome.

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.

⚠️ Примітка до версії: Internet Explorer 11 було припинено підтримку в червні 2022 року. Запустіть той самий сценарій для Microsoft Edge за допомогою EdgeOptions або запускати Edge в режимі IE, де цього все ще потребує застаріла програма.

Поширені запитання

Проєкт Chromium працює badssl.com, який обслуговує прострочені, самопідписані, відкликані та неправильно хостовані піддомени. Спрямуйте тестовий скрипт на expired.badssl.com, щоб безпечно відтворити справжній збій сертифіката.

Ні. Selenium 4 видалив його на користь класів браузера Options. Створіть ChromeOptions, FirefoxOptions або об'єкт EdgeOptions, викличте setAcceptInsecureCerts(true) та передайте його конструктору драйвера.

Створіть об'єкт EdgeOptions, викличте setAcceptInsecureCerts(true) та передайте його конструктору EdgeDriver. Шаблон відповідає Chrome, оскільки обидва браузери використовують один і той же движок Chromium.

SafariDriver не має параметра accept-insecure-certs. Використовуйте JavascriptВиконавець для запуску CertificateWarningController.visitInsecureWebsiteWithTemporaryBypass(), який очищає проміжне вікно лише для цього сеансу.

ERR_CERT_DATE_INVALID позначає сертифікат, термін дії якого минув, ERR_CERT_REVOKED – відкликаний, а ERR_CERT_AUTHORITY_INVALID – самопідписаний сертифікат або сертифікат ненадійного емітента. Код визначає причину, перш ніж ви зміните будь-який скрипт.

Машинне навчання групує збої сертифікатів за кодом помилки та хостом, відокремлюючи прострочений проміжний сертифікат від справжнього дефекту. Така кластеризація запобігає реєстрації однієї проблеми середовища як багатьох непов’язаних тестових помилок.

Так. Копілот GitHub створює об'єкт Options та конструктор драйвера з коментаря, але перевірте, чи пропонується setAcceptInsecureCerts, а не видалений виклик DesiredCapabilities.

Тільки в тестових середовищах. Прийняття всіх сертифікатів приховує дефекти закінчення терміну дії, імені хоста та ланцюжка, тому не вказуйте цей прапорець у виробничих димових тестах та явно підтверджуйте сертифікат під час перевірки безпеки.

Підсумуйте цей пост за допомогою: