Стоит переключиться на https, и прилетает отказ с кодом 407, хотя пара входа задана и та же самая пара прекрасно работает в curl с той же машины. Причём отказ приходит мгновенно, до всякого сетевого обмена, будто клиент даже не пробовал.
Кто сталкивался, скажите сразу: это про disabledSchemes или я копаю не туда?
Про него. В джаве базовый вход внутри туннеля выключен по умолчанию, само свойство так и называется:
-Djdk.http.auth.tunneling.disabledSchemes=""
Пустое значение снимает запрет, и вход через CONNECT начинает проходить. Есть парное свойство для обычных запросов без туннеля, jdk.http.auth.proxying.disabledSchemes, там по умолчанию запрета нет.
Мгновенный отказ до обмена это как раз оно: клиент видит, что предложенная схема ему запрещена, и обрывает разговор сам.
Свойства для http и https разные, одно другое не покрывает. Задали только первое, и весь https пойдёт напрямую, молча, без единого сообщения об ошибке. Разделитель в списке исключений вертикальная черта, запятая там не понимается, звёздочка работает только слева. И https.proxyHost описывает адрес самого посредника, схема тут про целевой запрос.
Если в дампе после отказа нет второй попытки с заголовком входа, ищите запрет схем. Если попытка есть и всё равно отказ, ищите ошибку в паре или непривязанный адрес.
По моему опыту разбор быстрее всего идёт в таком порядке. Сначала смотрим, дошёл ли до посредника хоть один пакет: нет обмена на нужном порту вообще, значит свойства не подхватились и джава ушла напрямую мимо всего, что вы прописали. Дальше смотрим первую строку туннеля: там должно стоять имя целевого узла с портом. Видите вместо него обычный запрос с путём, значит https поехал как http, и вы задали только половину свойств.
Отдельно предупрежу про сокеты: если в дампе на порту тишина, а программа при этом что-то делает, проверьте, не перебивает ли настройку сама библиотека. Многие клиенты внутри держат собственные поля и системные свойства читают только при старте, до первого обращения. Правка свойств из кода после того, как соединение уже создано, ни на что не влияет, их надо задавать флагами при запуске.