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

Как работают сертификаты безопасности?

1.8 Middle🔥 171 комментариев
#Теория тестирования

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

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

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

Принцип работы сертификатов безопасности

Сертификаты безопасности, чаще всего в контексте SSL/TLS, работают по принципу асимметричной криптографии и системы доверия, обеспечивая три ключевые функции: аутентификацию сервера, шифрование передаваемых данных и целостность информации.

Основные компоненты и этапы работы

  1. Асимметричное шифрование (публичный и приватный ключи)
    *   Сервер владеет парой ключей: **приватный ключ** (секретный, хранится в безопасности) и **публичный ключ** (свободно распространяется).
    *   Данные, зашифрованные публичным ключом, могут быть расшифрованы только соответствующим приватным ключом, и наоборот.

  1. Сертификат и цепочка доверия
    *   Сам сертификат — это цифровой документ, который связывает публичный ключ сервера с его идентификацией (доменным именем). Он подписан **Центром сертификации (Certificate Authority, CA)**.
    *   Браузеры и ОС заранее имеют список доверенных корневых CA (хранилище доверенных корневых сертификатов).
    *   Цепочка доверия: Корневой CA → Промежуточный CA → Сертификат сервера. Подпись каждого предыдущего звена проверяет легитимность следующего.

Процесс установления безопасного соединения (TLS Handshake)

Упрощенная последовательность шагов при подключении клиента (браузера) к защищенному серверу (https://):

  1. Client Hello: Клиент отправляет серверу запрос, включая поддерживаемые версии TLS и шифры.
  2. Server Hello: Сервер отвечает, выбирая версию TLS и шифр, и отправляет свой SSL-dертификат (с публичным ключом внутри).
  3. Проверка сертификата клиентом:
    *   Клиент проверяет срок действия сертификата.
    *   Проверяет, соответствует ли имя в сертификате запрошенному домену.
    *   **Проверяет цифровую подпись CA**, просматривая цепочку до доверенного корневого сертификата. Это ключевой этап аутентификации сервера.
  1. Генерация сессионного ключа:
    *   Клиент генерирует случайный **сессионный ключ** (симметричный, для высокой скорости шифрования данных).
    *   Он шифрует этот сессионный ключ публичным ключом сервера из сертификата и отправляет зашифрованное сообщение серверу.
  1. Расшифровка сессионного ключа сервером:
    *   Только сервер, обладающий соответствующим приватным ключом, может расшифровать это сообщение и получить сессионный ключ.
  1. Начало безопасного обмена:
    *   И клиент, и сервер теперь используют общий **сессионный ключ** для симметричного шифрования всего последующего трафика (HTTP-запросы, ответы, данные).

# Пример проверки сертификата с помощью OpenSSL в терминале
openssl s_client -connect google.com:443 -showcerts

Эта команда отобразит цепочку сертификатов, информацию об издателе (CA), срок действия и использованные алгоритмы.

Роль в тестировании (QA Automation)

Для автоматизатора понимание сертификатов критически важно при:

  • Настройке тестовых окружений: Умение работать с самоподписанными сертификатами (self-signed) в dev/stage средах.
  • Написании автотестов для API: Обработка SSL--ертификатов в библиотеках (например, requests в Python или RestAssured в Java).
  • Обходе проверок сертификатов в тестах (с осторожностью, только в изолированных средах).
# Пример отключения проверки сертификата в Python requests для тестовой среды
import requests
# ВНИМАНИЕ: Только для не-продакшен окружений!
response = requests.get('https://test-env.internal', verify=False)
# Или указание пути к custom CA bundle
response = requests.get('https://test-env.internal', verify='/path/to/custom/cert.pem')
// Пример настройки доверия к самоподписанному сертификату в Java (TestNG/RestAssured)
import io.restassured.RestAssured;
import javax.net.ssl.*;
import java.security.cert.X509Certificate;

public class SSLTests {
    @BeforeTest
    public void disableSSLVerification() {
        // Настройка доверенного менеджера, который принимает все сертификаты
        TrustManager[] trustAllCerts = new TrustManager[] {
            new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; }
                public void checkClientTrusted(X509Certificate[] certs, String authType) { }
                public void checkServerTrusted(X509Certificate[] certs, String authType) { }
            }
        };
        // Применение конфигурации (только для тестов!)
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        RestAssured.useRelaxedHTTPSValidation();
    }
}

Ключевые выводы

  • Сертификаты обеспечивают доверие через иерархическую подпись уполномоченными Центрами сертификации.
  • TLS handshake использует асимметричное шифрование для безопасной передачи сессионного ключа, который затем используется для быстрого симметричного шифрования данных.
  • Для автоматизатора важно не только понимать теорию, но и уметь практически управлять сертификатами в тестовых фреймворках, обеспечивая безопасность и обходя ограничения в контролируемых не-продакшен окружениях.
Как работают сертификаты безопасности? | PrepBro