Як працює https в подробицях.
Я вже писав, що https - це не зовсім окремий протокол, а майже той же http тільки дані будуть проходити шифрування через прошарок безпеки - SSL. Тобто, відправляючи форму входу, твоя пошта та пароль шифруються за допомогою алгоритму, що використовує синхронний ключ і тільки після цього відправляються на сервер. Сервер розшифровує дані і далі працює з ними згідно своєї логіки. І навіть якщо, злодій перехопить дані, він отримає набір, непотрібних йому, біт інформації, котрі треба буде ще розшифрувати, а розшифрувати зможе тільки той, хто встановив з’єднання з сервером.
Як саме встановлюється з’єднання!?
- Клієнт встановлює з’єднання з сервером і запитує захищене з’єднання.
- При встановленні захищеного з’єднання клієнт відправляє серверу перелік алгоритмів шифрування (шифрів), котрі він знає. Сервер звіряє цей перелік із своїми шифрами та обирає найбільш надійний і повідомляє клієнта котрий алгоритм буде використовуватися.
- Сервер відправляє клієнту свій цифровий сертифікат, підписаний відповідним центром сертифікації, та відкритий ключ сервера.
- Клієнт перевіряє сертифікат. Він навіть може зробити запит до відповідного центру сертифікації, але зазвичай в ОС вже є набір встановлених кореневих сертифікатів надійних центрів сертифікації з якими браузер звіряє підпис отриманого від сервера сертифіката. Також звіряється, чи не закінчився термін дії сертифіката, чи виданий він для потрібного домена та інші речі.
- Генерується сеансовий ключ для захищеного з’єднання:
- Клієнт генерує випадковий рядок.
- Клієнт шифрує цей рядок відкритим ключем і відправляє на сервер.
- Сервер розшифровує цей рядок за допомогою приватного ключа.
Останній пункт є основою захищеного з’єднання, тому, що він дозволяє безпечно передати мережею ключ, котрий, в подальшому, буде використаний для шифрування даних за допомогою спеціального алгоритму шифрування, що використовує симетричний ключ. Це потрібно тому, що асиметричний ключ дуже надійний, але повільний, тому використовується тільки для важливих дій, як передача сеансового ключа, чи підтвердження клієнтові достовірності сервера чи навпаки.
Отже, протокол SSL використовує як симетричний, так і асиметричний ключі для шифрування даних. Але ж в чому ж різниця?
Симетричний ключ.
При шифруванні симетричним ключем, використовується один і той же ключ для шифрування та розшифрування даних. Якщо клієнт та сервер хочуть обмінюватися зашифрованими повідомленнями в безпечному режимі, то обидві сторони повинні мати однакові симетричні ключі. Цей недолік, як ти помітив нівелюється за допомогою передачі симетричного ключа зашифрувавши його, за допомогою, алгоритму, що використовує асиметричний ключ. Шифрування симетричним ключем, зазвичай, використовується для шифрування великих об'ємів даних, так як цей процес проходить в сотні, а то й в тисячі разів швидше, ніж при асиметричному шифруванні. Зазвичай використовуються алгоритми DES (Data Encryption Standard - стандарт шифрування даних), 3-DES (потрійний DES), RC2, RC4 чи AES (Advanced Encryption Standard - просунутий стандарт шифрування).
Асиметричний ключ
Шифрування за допомогою асиметричного (відкритого) ключа використовує пару ключів, які обидва були отримані, за допомогою цілого комплексу математичних обчислень. Один з ключів використовується в якості відкритого, як правило, сертифікаційний центр публікує публічний ключ в самому сертифікаті (зазвичай в заголовку - subject). Приватний ключ тримається в таємниці і ніколи, нікому, не показується. Ці ключі працюють в парі. Якщо відкритий ключ використовується для шифрування даних, то розшифрувати їх можна тільки за допомогою приватного ключа. Якщо дані шифруються приватним ключем, то розшифрувати їх можна тільки за допомогою публічного ключа. Таким чином, якщо клієнт шифрує дані за допомогою публічного ключа, то дані може розшифрувати тільки власник приватного ключа - в нашому випадку - сервер. Саме це є основою для цифрових підписів. Найпоширеніший алгоритм, який використовується при шифруванні з асиметричними ключами - RSA (названий на честь розробників Rivest, Shamir, Adleman).
Це основа безпечного з’єднання. Як бачиш нічого складно, загалом як і все на цьому світі…
Як отримати SSL сертифікат?
Про це я розповім в наступній частині.