Все локации активны · 99.99% uptime
Протоколы

Прокси и проверка TLS-сертификата

Ошибка сертификата, которая появляется после настройки прокси, может указывать на две совершенно разные вещи: либо присутствует промежуточный слой инспекции, либо это простая недоработка конфигурации. Различить их критически важно для вашей безопасности.

Что должно происходить в нормальной ситуации?

В корректно настроенном CONNECT-туннеле прокси вообще не касаетсясертификата. TLS-рукопожатие выполняется напрямую между клиентом и целевым сервером; прокси лишь передаёт зашифрованные байты. Следовательно, сертификат — это настоящий сертификат целевого сайта.

СХЕМАДвижение сертификата в исправном туннеле
НОРМАCONNECT ornek.com:443 HTTP/1.1ПроксиЦелевой серверЗапрос CONNECT200 establishedClientHelloПередача байтовНастоящий сертификатПрокси видит сертификат, но не может его изменить

В таком сценарии появление ошибки сертификата не ожидается. Если ошибка есть, значит либо трафик перехватывается, либо хранилище сертификатов клиента неполное.

Причины ошибок

СХЕМАИсточники ошибок сертификатов при работе через прокси
ДИАГНОСТИКАКОД / ПРИЗНАКВОЗМОЖНАЯ ПРИЧИНАРЕШЕНИЕunable to get local issuercertificateХранилище корневых сертификатов клиента неполное/устаревшееОбновите пакет CA (ca-certificates)self signed certificate inchainПрисутствует промежуточный слой инспекцииПроверьте и добавьте корпоративный корневой сертификатcertificate has expiredСрок действия сертификата цели истёк или системноевремя неверноПроверьте системное времяhostname mismatchИмя в сертификате не совпадает с SNIПроверьте целевой адрес и конфигурацию проксиПриложение не открывается(pinning)Закрепление сертификата отклоняет перехватИспользуйте канал без перехвата TLS

Вторая строка — тревожный признак: если в цепочке есть самоподписанный сертификат, ваш трафик, возможно, читают.

Как распознать SSL inspection?

СХЕМАИзучение цепочки сертификатов
# подробный вывод curl — посмотрите строки CONNECT01# Кто подписал сертификат при подключении через прокси?02curl -v -x http://proxy.example.com:8080 https://example.com 2>&1 \\03 | grep -E "subject:|issuer:|SSL certificate"0405# Сравните с прямым подключением06curl -v https://example.com 2>&1 | grep -E "subject:|issuer:"0708# Если issuer в двух выводах различается, значит трафик перехватывается0910# Подробная цепочка через openssl11openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \\12 | openssl x509 -noout -issuer -subject -dates

Если значения issuer в двух выводах различаются, значит прокси выполняет перехват TLS и может читать ваш трафик.

Предупреждение о безопасности

Заглушить ошибку сертификата с помощью -k или verify=False не значит решить проблему — вы лишь делаете её невидимой. Это равносильно разрешению всем, кто находится посередине, читать ваш трафик. Никогда не используйте такой подход в продакшене.

Правильные решения

01

Обновите хранилище корневых сертификатов

Это самая частая причина. В Linux используйте update-ca-certificates, в Python — собственный коннектор с certifi обновите пакет.

02

Добавьте корпоративный корневой сертификат после проверки

Если вы в корпоративной сети и этого требует политика, добавьте в хранилище доверия вашего клиента корневой сертификат, полученный от ИТ-отдела. Никогда не добавляйте сертификат, скачанный из интернета.

03

Проверьте системное время

Неверное системное время делает действующие сертификаты «просроченными». Часто встречается на виртуальных машинах.

04

Используйте канал без перехвата TLS

Приложения с закреплением сертификата не принимают перехват. В этом случае потребуется мобильный интернет или прямое подключение.

Хранилище сертификатов на уровне приложения

Не каждое приложение использует системное хранилище доверия. Именно этим объясняется ситуация «в браузере работает, а в моём скрипте нет»:

СредаХранилище сертификатовСпособ добавления
Системные утилиты Linux/etc/ssl/certsupdate-ca-certificates
Python (requests)пакет certifiREQUESTS_CA_BUNDLE переменная
Node.jsВстроенное хранилищеNODE_EXTRA_CA_CERTS переменная
Javaхранилище cacertskeytool -import
FirefoxСобственное хранилищеНастройки → Сертификаты
ChromeСистемное хранилищеНастройка операционной системы
СХЕМАПодключение дополнительного корневого сертификата к приложению
Переменные окружения01# Python requests02export REQUESTS_CA_BUNDLE=/путь/corporate-root.pem0304# Node.js05export NODE_EXTRA_CA_CERTS=/путь/corporate-root.pem0607# curl08curl --cacert /путь/corporate-root.pem -x http://proxy.example.com:8080 https://example.com0910# Git11git config --global http.sslCAInfo /путь/corporate-root.pem1213# Для всей системы Linux (будьте осторожны)14sudo cp corporate-root.crt /usr/local/share/ca-certificates/15sudo update-ca-certificates

Добавление сертификата на уровне всей системы делает его доверенным для всех приложений. Делайте это только для сертификатов, в источнике которых вы уверены.

Закрепление сертификата (Pinning)

Некоторые мобильные приложения и банковские клиенты закрепляют сертификат сервера внутри приложения. Увидев подставной сертификат, они отклоняют соединение — и никакое добавление корневого сертификата это поведение не изменит.

Именно этим объясняется жалоба «в корпоративном Wi-Fi приложение не открывается, а на мобильном интернете открывается». Единственное решение — использовать для этого приложения канал без перехвата TLS.

Резюме

В исправном CONNECT-туннеле прокси не касается сертификата; если вы видите ошибку, значит либо хранилище корневых сертификатов вашего клиента неполное, либо присутствует промежуточный слой инспекции. Чтобы различить эти две ситуации, сравните значение в цепочке сертификатов issuer с прямым подключением. Отключение проверки — не решение, а способ сделать риск невидимым. Чтобы увидеть, что на самом деле раскрывает ваше соединение, вы можете использовать тест анонимности наш инструмент.

Часто задаваемые вопросы

01Почему при использовании прокси я получаю ошибку сертификата?

Есть две основные причины: хранилище корневых сертификатов вашего клиента может быть неполным или устаревшим, либо промежуточный слой инспекции (SSL inspection) подменяет сертификат.

02Могу ли я отключить проверку сертификата?

Технически это возможно, но так делать не следует. Отключение проверки позволяет любому, кто находится посередине, читать и изменять ваш трафик. Устраняйте первопричину проблемы.

03Как понять, что трафик перехватывается?

Сравните поле issuer сертификата при подключении через прокси и напрямую. Если значения различаются, значит присутствует промежуточный слой.

04Нужно ли мне добавлять корпоративный корневой сертификат?

Если вы работаете в корпоративной сети и этого требует политика — да, но получайте сертификат только у вашего ИТ-отдела. Никогда не добавляйте в хранилище доверия корневой сертификат, скачанный из интернета.

05Почему приложение вообще не открывается в корпоративной сети?

Возможно, оно использует закрепление сертификата (pinning). Такие приложения закрепляют сертификат сервера внутри себя и отклоняют подставной сертификат. Добавление корневого сертификата это поведение не изменит.

Связанные статьи и страницы

СЛЕДУЮЩИЙ ШАГ

Усильте свою прокси-инфраструктуру уже сегодня.

Начните с платным тарифом за считанные минуты или сначала попробуйте наш бесплатный список прокси.

FREEPROXY.TR

Ищете бесплатные прокси — вы попали по адресу

Комплексная прокси-платформа, где можно посмотреть актуальные адреса бесплатных прокси, сравнить типы HTTP и SOCKS и проверить свои прокси-подключения бесплатными инструментами.