Що таке ssl і з чим його їсти - tech notes

Що таке ssl і з чим його їсти - tech notes

SSL (англ. Secure Sockets Layer - рівень захищених сокетів) - криптографічний протокол. Призначений для шифрування даних при обміні інформацією між мережевими пристроями. SSL спочатку розроблений компанією Netscape Communications для додавання протоколу HTTPS в свій веб-браузер Netscape Navigator. Згодом, на підставі протоколу SSL 3.0 був розроблений і прийнятий стандарт RFC, що отримав ім'я TLS.

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

Отже, часте використання протоколу SSL призвело до формування протоколу HTTPS (Hypertext Transfer Protocol Secure), що підтримує шифрування. Дані, які передаються по протоколу HTTPS, «упаковуються» в криптографічний протокол SSL або TLS, тим самим забезпечуючи захист цих даних. Такий спосіб захисту широко використовується в світі Веб для додатків, в яких важлива безпека з'єднання, наприклад в платіжних системах. HTTPS за замовчуванням використовує TCP-порт 443.

Розглядаючи ssl з'єднання потрібно розуміти що таке приватний або серверний ключ або server private key, запит підпису сертифіката або CSR (Certificate Signing request), публічний ключ (public key), сертифікат безпеки або Security Certificate, шифр, cipher або алгоритм шифрування, центр сертифікації або Certification Authority.

Приватний або серверний ключ - початок життя будь-якого СЕРТФІКАТА. Це текстовий файл який містить в собі набір незрозумілих символів, що нагадують абракадабру. Ця абракадабра є ключем на основі якого відбувається шифрування вихідних і дешифрування входять даних на стороні сервера. На основі цього файлу-ключа генерується запит підпису сертифіката або CSR (Certificate Signing request).

Запит підпису сертифіката або CSR - така ж закодованість абракадабра як і ключ. Ця абракадабра генерується на основі серверного ключа і містить інформацію яка буде включена в сертифікат. Це інформація про вашу організацію (organization name), ім'я веб сайту, на якому буде встановлено сертифікат (common name), структурний підрозділ організації (organizational unit), місце знаходження або місто (locality) і країна (country). Всі ці питання задаються генератором на етапі створення запиту. Також він містить публічний ключ (public key) який теж буде включений в сертифікат.

Центр сертифікації або Certification Authority - сторона (відділ, організація), чия чесність незаперечна, а відкритий ключ широко відомий. Завдання центру сертифікації - підтверджувати справжність ключів шифрування за допомогою сертифікатів електронного підпису. Іншими словами - це контора якій довіряють всі виробники браузерів. Саме туди направляється CSR для того що б ваш сайт перевірили на справжність, приналежність Вам і за певні гроші на основі свого ключа і Вашого CSRа зробили Вам сертифікат безпеки.

Окремо потрібно згадати самоподпісанний сертифікат - це такий же сертифікат безпеки, як і попередній з одним важливим мінусом: в ньому не міститься цифрового підпису центру сертифікації. Зазвичай при зверненні до таких сайтів екран стає червоним і браузер наполегливо рекомендує відмовитися від встановлення захищеного з'єднання з сервером.

Що ж відбувається, коли ми робимо звернення до сервера використовую https замість http?
SSL клієнт і сервер домовляються про встановлення зв'язку за допомогою процедури рукостискання або HandShake. Під час рукостискання клієнт і сервер домовляються про те як вони будуть забезпечувати безпечну передачу даних:

1. Клієнт посилає серверу номер версії SSL клієнта, зашифровані параметри щоб спілкуватися з клієнтом, використовуючи SSL.
2. Сервер робить те ж саме. Сервер також посилає свій сертифікат, який вимагає перевірки автентичності клієнта. Після ідентифікації сервер запитує сертифікат клієнта.
3. Клієнт використовує інформацію, передану сервером для перевірки автентичності. Якщо сервер не може бути перевірений, користувач отримує попередження про проблему і про те, що шифрування і аутентифікація з'єднання не може бути встановлена. Якщо сервер успішно пройшов перевірку, то клієнт переходить до наступного кроку.
4. Використовуючи всі дані, отримані до сих пір від процедури рукостискання, клієнт (у співпраці з сервером) створює попередній секрет сесії, в залежності від використовуваного шифру від сервера, шифрує його з допомогою відкритого ключа сервера (отриманого з сертифіката сервера. Відправленого на 2 -м кроці), а потім відправляє його на сервер.
5. Сервер намагається аутентифицировать клієнта. Якщо клієнт не може пройти перевірку справжності, сеанс закінчується. Якщо клієнт може бути успішно аутентифікований, сервер використовує свій закритий ключ для розшифровки попереднього секрету, а потім створюється головний секрет на сервері і на клієнті.
6. І клієнт, і сервер використовують секрет для генерації ключів сеансів, які є симетричними ключами, що використовуються для шифрування і розшифрування інформації, якою обмінюються під час SSL сесії.
7. Клієнт посилає повідомлення сервера, інформуючи його, що майбутні повідомлення від клієнта будуть зашифровані за допомогою ключа сеансу. Потім він відправляє окреме, зашифроване повідомлення про те, що частина рукостискання закінчена.
8. І на закінчення, сервер посилає повідомлення клієнту, інформуючи його, що майбутні повідомлення від сервера будуть зашифровані за допомогою ключа сеансу. Потім він відправляє окреме, зашифроване повідомлення про те, що частина рукостискання закінчена.

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

Ясна річ, що головною перевагою є перший пункт.

Є й друга сторона медалі. До недоліків використання ssl можна віднести:
- гроші. Так за сертифікати потрібно платити конторам, які називаються центрами сертифікації. Дуже шановні центри сертифікації беруть дуже непогані гроші за те, що підписують Ваш сертифікат.
- знову гроші? Так. Https з'єднання більш ненажерливі в плані ресурсів системи. Може знадобитися більш потужний сервер. Саме тому не рекомендується використовувати https для всього веб сайту.

Якщо цікаво, можна почитати про:

(Visited 258 times, 1 visits today)