Что такое SSL и TLS, есть ли между ними отличия?go-95

SSL (Secure Sockets Layer) и TLS (Transport Layer Security) — это криптографические протоколы, обеспечивающие безопасную передачу данных в сети. Они используются для шифрования соединений (например, в HTTPS, FTPS, SMTP). Хотя термины часто используют взаимозаменяемо, TLS является более современным и безопасным преемником SSL.

Эволюция протоколов

  1. SSL 1.0 (1994) — никогда не публиковался из-за критических уязвимостей.
  2. SSL 2.0 (1995) — быстро устарел из-за фундаментальных проблем безопасности.
  3. SSL 3.0 (1996) — значительное улучшение, но в 2014 году объявлен небезопасным (атака POODLE).
  4. TLS 1.0 (1999) — фактически SSL 3.1, но с переименованием из-за юридических вопросов.
  5. TLS 1.1 (2006) — добавлена защита от атак CBC.
  6. TLS 1.2 (2008) — современный стандарт до недавнего времени.
  7. TLS 1.3 (2018) — революционное обновление с упрощённым рукопожатием и улучшенной безопасностью.

Ключевые отличия SSL и TLS

Характеристика SSL TLS
Шифрование Устаревшие алгоритмы (RC4, DES) Современные (AES, ChaCha20)
Безопасность Уязвим к атакам (POODLE, BEAST) Защищённые версии (особенно 1.3)
Производительность Медленнее из-за устаревших методов Оптимизированное рукопожатие
Совместимость Отключён в современных системах Поддержка даже в TLS 1.3

Как работает TLS

  1. Client Hello: Клиент отправляет список поддерживаемых шифров и параметров.
  2. Server Hello: Сервер выбирает шифр и отправляет свой сертификат.
  3. Key Exchange: Обмен ключами по алгоритму (например, ECDHE).
  4. Finished: Подтверждение шифрования с обеих сторон.
  5. Защищённая передача: Данные шифруются выбранным алгоритмом (AES-256-GCM).

Пример проверки TLS-версии в Go:

package main

import (
    "crypto/tls"
    "fmt"
    "net/http"
)

func main() {
    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{
                MinVersion: tls.VersionTLS12, // Минимальная версия TLS
            },
        },
    }

    resp, err := client.Get("https://example.com")
    if err != nil {
        fmt.Println("Ошибка:", err)
        return
    }
    defer resp.Body.Close()

    fmt.Println("Статус:", resp.Status)
}

Почему TLS 1.3 лучше?

  • 1 RTT Handshake: Соединение устанавливается за один обмен пакетами (вместо 2 в TLS 1.2).
  • Удалены небезопасные алгоритмы: Нет поддержки RSA, SHA-1, CBC-режимов.
  • Forward Secrecy: Сессионные ключи не могут быть раскрыты даже при компрометации сервера.

Где используются?

  • HTTPS (включая HTTP/2 и HTTP/3)
  • Защищённые соединения баз данных (например, PostgreSQL с SSL)
  • VPN (например, OpenVPN поверх TLS)
  • Электронная почта (SMTP, IMAP)

Резюмируем

TLS — это современный стандарт безопасности, полностью заменивший SSL. Все новые системы должны использовать минимум TLS 1.2, а в идеале — TLS 1.3. SSL всех версий считается устаревшим и небезопасным.