Ответ
TLS (Transport Layer Security) — это криптографический протокол, предназначенный для обеспечения безопасной связи между сетевыми приложениями (например, браузером и веб-сервером). Он является преемником устаревшего протокола SSL (Secure Sockets Layer).
Основные цели TLS:
- Шифрование: Защита передаваемых данных от прослушивания (конфиденциальность).
- Аутентификация: Проверка подлинности сервера (а иногда и клиента) с помощью цифровых сертификатов.
- Целостность данных: Гарантия того, что данные не были подменены в пути, с использованием кодов аутентификации сообщений (MAC).
Как это связано с тестированием (QA):
- Тестирование HTTPS-соединений: Большинство современных API работают по HTTPS (HTTP поверх TLS). Тестировщик должен уметь работать с такими endpoint'ами.
- Работа с сертификатами: Частая задача — настройка тестового окружения с использованием самоподписанных или корпоративных сертификатов. Необходимо знать, как импортировать их в хранилище доверенных корневых сертификатов (truststore) для инструментов тестирования (Postman, Selenium, кастомные скрипты).
- Обработка ошибок: Тесты должны корректно обрабатывать и валидировать ошибки, связанные с TLS (например,
SSLHandshakeException,CERTIFICATE_VERIFY_FAILED).
Пример настройки доверия к самоподписанному сертификату в Java-коде (для тестов):
// Упрощённый пример: отключение проверки SSL (НЕ для продакшена! Только для тестовых сред!)
import javax.net.ssl.*;
import java.security.cert.X509Certificate;
public class DisableSSLValidation {
public static void disable() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public 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());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
}
}