Протокол HTTPS та передача даних через мережу — Введення в тестування веб-додатків
Коли користувач взаємодіє з сайтом, відбувається невидимий процес передачі даних. Користувач надсилає запит, що хоче побачити сторінку, а сервер повертає відповідь у вигляді HTML-сторінки.
Для такого способу передачі використовуються спеціальні набори правил, які називаються протоколами. Докладніше про те, як працює інтернет та які бувають протоколи розповідається в курсі «Введення в інтернет», посилання на який буде наприкінці уроку.
У цьому уроці ми дізнаємося про протокол HTTP та його захищену версію — протокол HTTPS. Дізнаємось, чому небезпечно передавати банківські дані за протоколом HTTP і як зловмисники можуть вкрасти цю інформацію.
Типи протоколів
Протоколи в Інтернеті — це набори правил та угод, за якими відбувається певна дія в мережі, наприклад, передається інформація в Інтернеті. Вони визначають, як передається інформація всередині мережі: від типів проводів та підключень до типу інформації, яку можна передати через мережу.
У цьому уроці ми розберемо два протоколи, які відповідають за спілкування комп'ютерів у мережі Інтернет. Це протоколи:
Розберемо кожен докладніше.
Протокол HTTP
З минулих уроків ми дізналися, що сайти складаються з гіпертексту, який розмічається за допомогою HTML.
Припустимо, що ми заходимо на сторінку курсу з тестування і клацаємо на урок про гіпертекст. У цей час сервер формує відповідь як HTML-сторінки. Коли відповідь буде готова, сервер пересилає її нам:
Запити та відповіді у цьому випадку відбуваються за допомогою протоколу HTTP, який розшифровується як HyperText Transfer Protocol або протокол передачі гіпертексту. Він встановлює, як передаються дані, яка інформація має бути передана на сервер, а яка повернута користувачеві.
Так виглядає частина запиту від браузера при зверненні до сторінки цього уроку:
GET /courses/web-testing-basics/lessons/hypertext/theory_unit HTTP/3 Host: ru.hexlet.io User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 110.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Це лише невелика частина того, які дані надсилаються на сервер при зверненні до сторінки. По них сервер розуміє:
- Яку сторінку запитують
- Хто запитує сторінку, а саме дані про браузер
- Які дані може обробити користувач
- Передані дані у формі
Останній пункт списку може становити небезпеку. Через протокол HTTP передаються дані, що вводяться у формах. Небезпека в тому, що ці дані не захищені і передаються у вигляді, в якому ми їх відправили:
Коли сервер отримує запит, він формує як дані у вигляді HTML, а й безліч службової інформації. Вона допомагає браузеру правильно обробити цей запит. Ось приклад отриманої відповіді від сервера:
HTTP/2 200 OK date: Fri, 17 Mar 2023 12:27:07 GMT content-type: text/html; charset=utf-8 Тут і далі розмітка у форматі HTML
У цій відповіді для тестувальника важливим є перший рядок — HTTP/2 200 OK . Цей рядок містить «відповідь сервера» — спеціальний код, який надходить від сервера і підказує браузеру, який статус сторінки.
Цих відповідей багато, але варто знати напам'ять кілька з них:
- 200 OK - Дані отримані без помилок. Цей статус є основним для сторінок
- 301 Moved Permanently — сторінку переміщено на нову адресу. Коли браузер отримує цей код, шукає у відповіді нову сторінку і автоматично переходить на неї. Такий процес називається «редирект»
- 404 Not Found - Сторінка не знайдена. Щоб не віддавати порожню сторінку з помилкою, розробники роблять спеціальну сторінку у разі виникнення помилки та показують її користувачеві
- 500 Internal Server Error, 502 Bad Gateway і 503 Service Unavailable — помилки, пов'язані із сервером. Тимчасові помилки – пов'язані з проблемою доступу до сервера. Глобальні помилки – пов'язані з непрацюючим кодом або проблемами з доступом до бази даних
Головна проблема HTTP – відкритість даних. Якщо передавати важливі дані, то вони пересилаються у відкритому вигляді та можуть бути перехоплені зловмисниками. Щоб уникнути цього, придумали стандарт HTTPS, де буква S означає Secure — безпечний.
Протокол HTTPS
Головна відмінність HTTP від HTTPS – шифрування даних. Всі дані, що передаються від клієнта на сервер, будуть передаватися не у відкритому, а у зашифрованому вигляді. Це дозволяє захиститися від атак хакерів.
Подивимося на адресний рядок:
Сайт Хекслета теж працює за HTTPS, про що говорить протокол перед назвою сайту та значок замочка. Коли ви бачите ці два параметри, можна не хвилюватися за свої дані:
Що тестувати
При тестуванні веб-сторінок слід звертати увагу на такі фактори:
- Якщо від сторінки надсилаються дані від користувачів, сторінка повинна бути захищена за протоколом HTTPS. Найпростіший варіант – повністю перекласти сайт на HTTPS
- Усі сторінки повинні віддавати HTTP код "200 OK"
- Якщо одну зі сторінок переміщено, вона повинна віддавати код «301 Moved Permanently» і автоматично перенаправляти на нову сторінку
Інструменти для тестування
Для перевірки сторінки тестувальник може використовувати вбудований усі браузери «Інструменти розробника». Як його відкривати ми розбирали на минулих уроках. Зараз розберемо, як побачити відповідь сервера.
Щоб переглянути всі запити сервера, використовується вкладка Network:
У цій вкладці нас цікавить кілька полів:
- Status - Код відповіді. Це код HTTP, про який йшлося вище. У більшості нормальних ситуацій цей код буде 200
- Domain - Звідки повернулася відповідь на запит. На сайтах можуть використовуватись різні скрипти, стилі, зображення, які беруться із зовнішніх джерел. Вкладка Domain показує джерело, з якого надійшла відповідь
- File - Який конкретно файл був завантажений
Відкрийте інструмент розробника на цій сторінці, перейдіть на вкладку Network і перезавантажте сторінку. Це потрібно, щоб побачити всі завантажені ресурси. Однією з перших рядків буде:
200 GET uk.hexlet.io theory_unit
Це і є відповідь поточної сторінки теорії. Код 200 повідомить, що сторінка повернулася без помилок
Висновки
У цьому уроці ми розібрали, що передачі даних між клієнтом і сайтом використовується протокол HTTP. Протокол — набір правил і угод, якими будується логіка передачі. При отриманні інформації сервер відправляє код статусу, за яким браузер розуміє, чи правильно дійшли дані.
Кодів HTTP багато, але варто пам'ятати про кілька основних з них:
- 200 OK — Дані отримані без помилок
- 301 Moved Permanently — сторінку переміщено на нову адресу
- 404 Not Found — сторінка не знайдена
- 500 Internal Server Error, 502 Bad Gateway та 503 Service Unavailable — помилки, пов'язані з сервером
За протоколом HTTP передається як запит, а й різна службова інформація, а як і дані з форм. Це небезпечно, оскільки дані не шифруються і можуть бути перехоплені зловмисником.
Щоб уникнути перехоплення інформації, використовується протокол HTTPS – захищена версія HTTP. Характерна риса протоколу - шифрування даних. Тому протокол використовується скрізь, де є форми. При цьому протокол використовують не на конкретній сторінці, а на всьому сайті.
Самостійна робота
Візьмемо для прикладу три сайти, які працюють по-різному з HTTP та HTTPS:
Вивчіть, як ці сайти працюють, якщо зайти на них із протоколом https:// та http:// . Для цього в адресному рядку браузера необхідно ввести протокол вручну.
Дайте відповідь на наступні питання:
- Чи можна відкрити сайт по HTTP?
- Чи можна відкрити сайт HTTPS?
- Чи працює перенаправлення користувача з сайту HTTP на HTTPS?
- Чи однаково відкривається сайт у різних браузерах?
Додаткові матеріали
Залишились питання? Вкажіть їх у розділі «Обговорення»
Вам дадуть відповідь команда підтримки Хекслета або інші студенти
Відкрити доступ
Курси програмування для новачків та досвідчених розробників. Почніть навчання безкоштовно
- 130 курсів, 2000+ годин теорії
- 1000 практичних завдань у браузері
- 360 000 студентів
Наші випускники працюють у компаніях:
Що таке TLS та як працює цей протокол
Коли ми відправляємо через мережу якісь дані, їх потрібно захищати від потрапляння не в ті руки. Тому інформацію прийнято передавати у зашифрованому вигляді. За це відповідають спеціальні протоколи шифрування. TLS, або Transport Layer Security — один із таких протоколів. У сучасному інтернеті його можна зустріти щокроку.Розповідаємо, що це за протокол, чим він відрізняється від SSL і чому набув такої популярності.
Які функції виконує TLS
- автентифікація - перевірка, чи до мережі підключилися потрібні пристрої або користувачі;
- шифрування - захист доступу до даних від сторонніх;
- цілісність - захист інформації від пошкоджень чи заміни.
За мережевою моделлю OSI протокол TLS знаходиться на четвертому, або транспортному рівні. Саме на цьому рівні відбувається передача даних через мережу. Завдання TLS — створити безпечне з'єднання між сервером та клієнтом, тобто браузером користувача.
Перевірити, чи використовується TLS на якомусь сайті дуже легко. Подивіться на адресний рядок у браузері. Якщо адреса ресурсу починається з HTTPS
- Отже, на ньому працює захищений протокол. І зараз таких сайтів більшість.
TLS та SSL: відмінності
Ще один протокол захисту даних – SSL, або Secure Sockets Layer. Він діє приблизно за тим же принципом, що TLS, а в розмовній промові їх назви навіть використовують як синоніми. Поговоримо, чим же TLS відрізняється від SSL.
Насправді TLS – вдосконалена версія SSL:
- Оригінальний SSL вигадали ще в 90-х роках минулого століття. Згодом він серйозно застарів: виявились слабкі місця у безпеці протоколу, якими користувалися хакери.
- На заміну старому протоколу створили новий TLS. Процеси у ньому дещо змінили — додали більше перевірок та закрили вразливості. Але принцип роботи залишився схожим.
- Нині новий протокол TLS використовують практично скрізь. Але по старій пам'яті його, як і раніше, називають SSL, хоча старий протокол у чистому вигляді вже майже не застосовується.
Як працює TLS
Протокол складається з двох основних компонентів:
- TLS handshake protocol, або протокол рукостискання – відповідає за встановлення безпечного з'єднання між клієнтом та сервером;
- TLS record protocol, або протокол запису – відповідає за шифрування та передачу даних між сторонами.
Коли TLS-клієнт, тобто браузер, з'єднується із сервером сайту, TLS спочатку встановлює з'єднання і лише після цього розпочинає обмін даними. Ось як виглядає принцип роботи TLS покроково.
Сертифікація Цей крок можна назвати нульовим. Щоб використовувати сервер TLS, сайт повинен отримати TLS-сертифікат — електронний документ, що підтверджує справжність. Його ще називають SSL-сертифікатом. Це свого роду паспорт сайту.
- Сертифікат можна оформити у спеціальному центрі. Для цього власник сайту має вказати інформацію про нього та почекати, доки сайт перевірять. Залежно від рівня перевірки, сертифікат може бути платним або безкоштовним.
- Коли сайт отримує сертифікат, власнику надходить вся інформація про нього. Цю інформацію потрібно за інструкцією скопіювати до себе на сервер, зазвичай це робиться через адміністративну панель сайту.
- Після отримання та встановлення сертифіката сайт зможе використовувати протокол шифрування TLS та захищений протокол HTTPS. А браузер користувача «бачитиме», що справжність сайту підтверджена.
Встановлення TLS-з'єднання. Коли користувач заходить на сайт і протокол TCP встановлює з'єднання між клієнтом та сервером, починається процес TLS-рукостискання. Він дозволяє перевірити, що і сайт, і браузер – ті, за кого себе видають. Точні дії сторін можуть бути різними залежно від версії TLS, яку використовує сайт. Але основних кроків три:
- привітання та обмін можливостями. Клієнт та сервер діляться один з одним інформацією про протоколи, які використовують;
- TLS-автентифікація. Сервер надсилає браузеру свій сертифікат, щоб підтвердити справжність сайту. А браузер, своєю чергою, перевіряє актуальність документа;
- обмін ключами. Сервер та клієнт генерують криптографічні ключі, за допомогою яких шифруватимуть з'єднання в рамках цієї сесії.
Після цього сторони підтверджують, що рукостискання пройшло успішно. Виконання всіх цих кроків займається TLS handshake protocol.
Іноді автентифікація потрібна не тільки від сервера, а й від клієнта. Це називається двосторонньою автентифікацією. Клієнт у такому разі теж має надати свій цифровий сертифікат.
Підтримка безпеки. Крім TLS-рукостискання, протокол може застосовувати ще кілька інструментів автентифікації. Вони не замінюють, а доповнюють рукостискання:
- False Start, або фальстарт поновлює сесію, наприклад, якщо користувач перейшов з сайту в іншу вкладку браузера, а потім повернувся. Цей механізм дозволяє не повторювати рукостискання та швидше перейти до обміну повідомленнями;
- Chain of Trust, або ланцюжок довіри багаторазово перевіряє справжність сертифіката. Якщо сертифікат скомпрометовано, протокол перерве з'єднання з метою безпеки.
Шифрування повідомлень. Після завершення рукостискання сторони починають обмінюватися інформацією. Наприклад, у користувача завантажується сторінка його облікового запису. А сайт отримує від браузера тексти повідомлень, які користувач надсилає до чату. Уся ця інформація захищена шифруванням TLS.
- Перед відправкою дані розбиваються кілька маленьких пакетів. Кожен із пакетів стискається та шифрується окремо від інших, але ключ шифрування у них спільний.
- Ключі шифрування генеруються окремо кожної сесії.Якщо сесія закінчилася і користувача, наприклад, розлогинило — коли він знову увійде, з'єднання встановиться вже з новими ключами.
- У різних версіях протоколу можна використовувати різні методики шифрування. Зазвичай чим молодша версія, тим більше сучасні методи в ній використовуються і тим складніше зламати таке шифрування.
- Крім шифрування, пакети даних підписують цифровим підписом, щоб довести їхню справжність.
Докладніше про те, як працює шифрування в протоколі TLS.
Шифрування у протоколі TLS
І під час TLS-рукостискання, і під час обміну даними протокол шифрує всю інформацію, якою обмінюються сторони. Але алгоритми при цьому використовуються різні.
Асиметричне шифрування. Так називають спосіб шифрування, при якому ключі для зашифрування та розшифрування повідомлення різні:
- для зашифрування використовується публічний ключ - його можна розголошувати, адже за його допомогою не вдасться розшифрувати інформацію;
- для розшифровки використовується приватний ключ - він не розголошується.
Асиметричне шифрування вважається більш надійним, але працює повільніше за симетричне. Тому TLS використовує його тільки при рукостисканні – сторони генерують секретний ключ у рамках сесії.
Також асиметричне шифрування використовується при видачі та встановленні TLS-сертифіката. Разом із сертифікатом власник сайту отримує пару з публічного та приватного ключа. Приватний ключ потрібно зберегти на сервері - він використовується при автентичності сертифіката.
Приклади асиметричних алгоритмів шифрування TLS:
- RSA -алгоритм обміну ключами, який використовувався до версії 1.3, але вважається небезпечним;
- Diffie-Hellman - більш сучасний та безпечний спосіб обміну ключами;
- DSA - ще один застарілий алгоритм зі старих версій TLS відповідає за перевірку цифрового підпису;
- ECDSA - Новіший алгоритм перевірки цифрового підпису.
Симетричне шифрування. У цьому випадку ключ для зашифрування та розшифровки один. Перед початком передачі сторони повинні обмінятися цим ключем, тому такі алгоритми вважаються трохи більш ризикованими: ключ можуть перехопити. Натомість вони працюють швидко та ефективно, тому TLS використовує їх під час надсилання повідомлень у рамках сесії.
Стати фахівцем
з кібербезпеки – навчитеся відображати кібератаки та підтримувати безпеку будь-яких IT-систем
Приклади симетричних алгоритмів шифрування в TLS:
- AES - використовує ключі довжиною 128, 192 чи 256 біт. Довшіші ключі краще захищають, але зменшують швидкість обміну даними;
- ChaCha20-Poly1305 складається із двох компонентів. Перший генерує самі ключі, другий створює коди для автентифікації повідомлень;
- Triple DES - послідовно шифрує дані трьома різними ключами. Використовувався у версіях TLS до 1.2, але у версії 1.3 його припинили підтримку.
Хешування. Це не зовсім шифрування — швидше за додатковий інструмент, за допомогою якого протокол перевіряє цілісність даних. Під час хешування масив інформації перетворюється на рядок наперед відомої довжини - хеш, або хеш-суму. Якщо вихідні дані зміняться хоча б один символ, хеш-сума зміниться цілком. І цю властивість використовують для перевірки:
- коли сервер або клієнт надсилає дані, він також обчислює та пересилає їх хеш;
- друга сторона отримує дані і знову обчислює їх хеш;
- потім одержувач порівнює хеш, який йому передали, та хеш, який він вирахував самостійно.
Якщо отримані хеш-суми збігаються, значить дані не пошкоджені.А от якщо хеші різняться, значить, інформація змінилася. Хтось міг перехопити її та поміняти або вона могла просто пошкодитися під час передачі.
Приклади алгоритмів хешування в TLS: SHA-256, SHA-512 та SHA-384. Вони схожі і розрізняються лише довжиною хешу в бітах - саме її означають цифри у назві.
Версії TLS та чим вони різняться
Існує чотири версії протоколу:
- TLS 1.0 та TLS 1.1 вважаються застарілими — їхню підтримку вже відключили багато браузерів та мережевих служб. У цих версіях знайшли кілька критичних уразливостей. До того ж, у них використовуються алгоритми, які за сьогоднішніми мірками легко зламати. Тож використовувати їх не рекомендується.
- TLS 1.2 вийшла близько десяти років тому і використовується досі. Це не найновіша версія, але нею все ще користуються багато сайтів. Деякі застосовують її, тому що вона простіша і звичніша, деякі — через функції, яких немає у версії 1.3.
- TLS 1.3 з'явилася 2018-го і вважається найсучаснішою версією. У ній відмовилися від застарілих алгоритмів, додали механізм поновлення сесії та оптимізували рукостискання. Проте на цю версію перейшли ще не всі.
Швидше за все ви навряд чи зустрінете сучасний сайт, який буде працювати на TLS 1.0 або 1.1. Більшість ресурсів користуються як мінімум версією 1.2. А якщо створюватимете власний ресурс — можете самі вибрати, яку версію використовувати: 1.2 або 1.3.
Переваги та недоліки TLS
Протокол захищає інформацію набагато надійніше за застарілого класичного SSL. А ряд його переваг робить TLS ще й досить зручним, що й спричинило його популярність:
- дані захищені наскрізним шифруванням - шифруються з одного боку і розшифровуються, коли досягнуть інший. Протягом часу передачі вони зашифровані;
- для захисту не потрібна окрема апаратура або ПЗ - всі необхідні дії можуть виконати самі клієнт і сервер;
- у протоколі є можливість вести журнали подій, і це полегшує налагодження;
- протокол підтримує перетворення мережевих адрес — можна гнучкіше налаштовувати інфраструктуру мережі.
Втім, є протокол і мінуси. Як і будь-який засіб захисту інформації, TLS не може бути безпечним на 100% - про це потрібно пам'ятати і не забувати про обережність при веб-серфінгу. Навіть у TLS 1.3 вже є відомі вразливості. Крім того, TLS може трохи сповільнювати роботу сайту, але користувачеві це непомітно.
І все-таки переваг у TLS більше, не дарма його використовує майже весь інтернет. Навіть поки ви читаєте цю статтю, інформація передається до вашого браузера за допомогою захищеного з'єднання.
Короткі висновки
- TLS – це протокол шифрування даних та аутентифікації. Він захищає інформацію, якою клієнт обмінюється із сервером. Наприклад, браузер із сайтом.
- Протокол використовують на більшості сучасних сайтів - скрізь, де застосовується з'єднання HTTPS. Щоб увімкнути його на своєму ресурсі, власник сайту повинен випустити TLS-сертифікат у спеціальному центрі.
- Коли клієнт звертається до сервера, TLS спочатку ідентифікує обидві сторони та підтверджує, що вони ті, ким видаються. Потім шифрує інформацію, якою обмінюються сторони.
- Актуальні версії TLS - 1.2 та 1.3. Більш ранні версії вважаються вразливими та застарілими.
Навчіться захищати інформаційні системи: проводити атаки, аналізувати програми та шукати в них уразливості. Стати затребуваним спеціалістом і працюйте з будь-якої точки світу.