← Назад к вопросам

Что такое TLS?

1.0 Junior🔥 191 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое TLS (Transport Layer Security)

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

Ключевые принципы работы TLS

Протокол работает по модели "клиент-сервер" и включает несколько основных этапов:

  1. Установление безопасного соединения (TLS Handshake): Это начальная фаза, в ходе которой клиент и сервер договариваются о параметрах безопасности.
  2. Обмен ключами и аутентификация: Стороны обмениваются криптографическими ключами, а сервер (а иногда и клиент) подтверждает свою подлинность с помощью цифровых сертификатов.
  3. Шифрование данных: После успешного рукопожатия все передаваемые данные шифруются с использованием симметричного ключа, что обеспечивает высокую производительность.

Основные этапы TLS Handshake (упрощенно)

  • Client Hello: Клиент отправляет серверу список поддерживаемых версий TLS, алгоритмов шифрования и случайное число.
  • Server Hello: Сервер отвечает выбранной версией TLS, алгоритмом шифрования, своим случайным числом и отправляет свой цифровой сертификат.
  • Проверка сертификата: Клиент проверяет сертификат сервера (например, через цепочку доверия к центру сертификации — CA).
  • Обмен ключами: Клиент генерирует Pre-Master Secret, шифрует его открытым ключом сертификата сервера и отправляет его.
  • Генерация сессионных ключей: И клиент, и сервер, используя оба случайных числа и Pre-Master Secret, независимо вычисляют одинаковый Master Secret, из которого затем выводятся симметричные ключи для шифрования и MAC (коды аутентификации сообщений).
  • Завершение рукопожатия: Стороны обмениваются зашифрованными сообщениями о том, что дальнейшая связь будет вестись с использованием установленных ключей.

Роль в контексте QA Automation

Для инженера по автоматизации тестирования понимание TLS критически важно в нескольких аспектах:

  • Тестирование безопасности (Security Testing): Проверка корректной реализации TLS (правильные версии, стойкие шифры, валидные сертификаты) является частью тестирования на проникновение и security-аудита.
  • Автоматизация API-тестов: Подавляющее большинство современных REST API и SOAP-сервисов работают исключительно по HTTPS (HTTP поверх TLS). Автотесты должны уметь работать с такими защищенными endpoint'ами.
  • Обработка сертификатов в коде: Часто в тестовых и staging-средах используются самоподписанные сертификаты. Автотесты должны быть способны либо корректно их проверять, либо обходить проверку (в тестовых целях).
  • Анализ трафика и отладка: Для отладки проблем в сетевом взаимодействии иногда необходимо перехватывать трафик (например, с помощью Charles Proxy или Fiddler), что требует настройки доверия к корневому сертификату прокси-инструмента.

Пример кода: Игнорирование проверки SSL-сертификатов в тестах (Java + RestAssured)

В тестовой среде для упрощения можно временно отключить строгую проверку SSL. ВАЖНО: Такой подход допустим ТОЛЬКО для тестовых целей и никогда не должен использоваться в продакшн-коде.

import io.restassured.RestAssured;
import io.restassured.config.SSLConfig;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;

public class TestApiWithSelfSignedCert {

    @Test
    public void testInsecureApi() {
        // Настройка RestAssured на доверие всем хостам (небезопасно!)
        RestAssured.config = RestAssured.config()
                .sslConfig(new SSLConfig().relaxedHTTPSValidation());

        // Или более точечно: доверие конкретному алгоритму (например, TLS)
        // RestAssured.config = RestAssured.config()
        //        .sslConfig(new SSLConfig().allowAllHostnames());

        given()
                .log().all()
        .when()
                .get("https://test-server.local/api/users")
        .then()
                .log().all()
                .statusCode(200);
    }
}

Пример кода: Работа с клиентским сертификатом (Python + requests)

Для доступа к некоторым API может потребоваться предъявить клиентский сертификат.

import requests

# Пути к файлам клиентского сертификата и приватного ключа
CERT_FILE = '/path/to/client_certificate.pem'
KEY_FILE = '/path/to/client_private_key.key'

response = requests.get(
    'https://secure-api.example.com/data',
    cert=(CERT_FILE, KEY_FILE),  # Передача сертификата и ключа
    verify='/path/to/ca_bundle.pem'  # Путь к доверенным корневым сертификатам
)

print(response.status_code)
print(response.json())

Ключевые термины, связанные с TLS

  • SSL/TLS: Протоколы защиты транспортного уровня.
  • HTTPS: HTTP поверх TLS.
  • Цифровой сертификат: Электронный документ, удостоверяющий принадлежность открытого ключа субъекту.
  • Центр сертификации (CA): Доверенная организация, выпускающая цифровые сертификаты.
  • Handshake (рукопожатие): Процесс установления безопасного соединения.
  • Шифр (Cipher Suite): Набор алгоритмов, определяющих параметры шифрования, обмена ключами и аутентификации.
  • Самоподписанный сертификат (Self-Signed Certificate): Сертификат, выпущенный и подписанный тем же субъектом, который он удостоверяет (не доверенный публично CA).

Понимание TLS позволяет QA-автоматизатору не только корректно настраивать и выполнять автотесты для защищенных систем, но и участвовать в проектировании тестов безопасности, выявляя потенциальные уязвимости на уровне сетевого взаимодействия.