|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||||||||||||||||
Достучаться через прокси с помощью сертификата (и прочего)09.10.2019, 20:23. Показов 3516. Ответов 15
Метки нет (Все метки)
Доброе время суток.
Работаю в фирме, накрытой Великой Проксей: любой доступ во внешние адреса - только через прокси. Иначе никак. Дали задание сделать на Яве скачиватель данных с Я.Метрики. Ява - не мой профильный инструмент (да, даже если бы и был профильным) - вот всего этого д***ма я не понимаю. То есть не понимаю всей концепции сертификатов (да и как это понять без употребления?). ________________________________________ ________________________________________ _________________________ Попробовал постучаться напрямую - access denied. Что логично - мы накрыты проксей. Добавил нужные строки:
"javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPa thBuilderException: unable to find valid certification path to requested target" Тогда начал искать, как решить эту ошибку и нашел... *Пропускаю несколько шагов, к которым я вернусь позже* Скачиваем для начала сертификат вот этим:
*Теперь возвращаемся к шагам, которые я пропустил* Они мне изначально не понравились. Так как предлагают импортировать сертификат в общее хранилище. Это где такое видано, чтобы алгоритм лез в данные?! Но это советуют все: например тут или тут. Ладно, попробовал. Естественно, оно мне не дало импортировать в хороший файл всякий мусор, отказав в доступе. ________________________________________ ________________________________________ _________________________ Но как быть теперь? Я не понимаю двух вещей: 1. Что такое сертификат, и нафига он нужен. Если предположить, что серт - это некое удостоверение (типа пароля), что "я это я", то я в принципе не понимаю, как можно запрашивать сертификат по тому же каналу, что и буду общаться. Это все равно, что на весь офис кричать: " -Вася, давай мы придумаем тебе секретное слово, чтобы сразу понимать, что это ты! - Давай, это слово: "пароль-полироль"!.." И вот уже все в офисе могут представляться Васей по этому "сертификату"... 2. (более насущное) И как мне быть? Как подключиться и скачать данные с яндекс.метрики? Какие-таки действия мне нужно провернуть? 2.1. Желательно, чтобы ничего никуда не импортировать - это же бред. Если нужно дополнительное хранилище ключей - это должно быть отдельное, а одно смержденное. Помогите, пожалуйста. PS: вы так боитесь слово "помощь", что нельзя нормально написать заголовок.
0
|
||||||||||||||||
| 09.10.2019, 20:23 | |
|
Ответы с готовыми решениями:
15
Как сделать с помощью фильтров в "Политиках безопасности IP чтобы http трафик открывался через прокси сервер? Как быстро скачивать через прокси с файлообменников или без использования прокси При передаче post запроса через прокси сервер в ответ приходят ошибки с прокси сервера |
|
Модератор
|
||
| 09.10.2019, 21:49 | ||
|
Цитата с сайта апи яндекс метрики
Добавить заголовок к запросу это метод setRequestProperty conn.setRequestProperty("key", "value"); где key - название заголовка с заглавной буквы без двоеточия и проверяйте метод getResponseCode()
0
|
||
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||
| 09.10.2019, 23:17 [ТС] | ||
|
Я же изначально делал просто HTTP-запрос, без всего. И, если бы не было проблем с сертом, то и разбирался бы я сейчас с АПИ Яндекса, но я даже добраться-то до апи не могу. PS: АПИшка должна была вернуть джейсон вида: "вы не авторизованы".
0
|
||
|
Модератор
|
|||||||||||||||||||||
| 09.10.2019, 23:53 | |||||||||||||||||||||
|
Если по ошибке сертификата то тут гугл выдал что ява не принимает сертификат сервера (предположу яндекса), и нашел решение не передавать сертификат яндексу а установить сертификат в хранилище
На сколько я все это понимаю. В яве есть хранилище доверенных сертификатов, если там нету сертификата то ява плюется ошибками. У меня было нечто похожее когда я игрался со своим https сервером с самоподписанным сертификатом. И в решениях предлагается не в файл сертификата чтото добавлять а сам сертификат добавить в хранилище явы. То есть сам сертификат это ничего по сути, так как вместе с сертификатом должна идти информация о доверии ему. А это как раз наличие сертификата в общем хранилище. Да и в вашем коде использование кода который использует сертификат закомментировано
Не по теме: keystore — это специализированное хранилище секретных данных, которое используется Java-приложениями для шифрования, аутентификации и установки HTTPS соединений. Так, для аутентификации клиента и сервера, устанавливающих SSL (Secure Sockets Layer — уровень защищённых cокетов) соединение, требуются приватные ключи и сертификаты. Если используется односторонняя аутентификация, то keystore используется только на серверной стороне. При двусторонней аутентификации клиент и сервер обмениваются сертификатами; соответственно и у сервера, и у клиента должны быть keystore с парой ключей private/public + сертификат. Иными словами keystore используется для хранения ключей и сертификатов, применяемых для идентификации владельца ключа (клиента или сервера).
0
|
|||||||||||||||||||||
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||||
| 10.10.2019, 10:58 [ТС] | ||||
|
________________________________________ _____________________ Спасибо. Добавлено через 1 час 35 минут А при копировании кода сюда - забыл убрать.
0
|
||||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 10.10.2019, 11:01 | ||
|
Vhodnoylogin, если есть возможность отключить проверку, лучше так и сделать. Корпаративные SSL прокси это довольно сложная штука. Обычно они подменяют корневой сертификат чтобы работать, но если не знать принцип работы сертификатов, объяснить это будет невозможно
То есть если Вася хочет говорить с Петей, петя генерирует пару ключей приватный\публичный * Приватный ключ Петя не говорит никому * Публичный ключ Петя кричит на весь оффис * Петя шифрует сообщение приватным ключом и отправляет Васе * Любой (в том числе Вася) может расшифровать это сообщение используя публичный ключ, который Петя крикнул на весь оффис * Вася получает сообщение и применяет публичный ключ Пети чтобы его расшифровать. Если у него это получилось, значит сообщение точно от Пети т.к больше никто не может зашифровать сообщение таким образом чтобы его можно было расшифровать с Петиным публичным ключом. Вот так работает ассиметричное шифрование и именно за этим нужны сертификаты. В данном случае это тебе не сильно поможет в решении проблемы, но ты хотя бы будешь чуть больше понимать что происходит) Чтобы решить проблему тебе нужно следующее Запусти запрос не через джаву, а через любой рест клиент (можно даже чере браузер) Посмотри нет ли ошибки сертификата. Если есть, смело иди в IT отдел и говори чтобы пофиксили Если ошибки нет, ищи проблему в своем коде
1
|
||
|
Модератор
|
|||||||
| 10.10.2019, 12:04 | |||||||
Сообщение было отмечено Vhodnoylogin как решение
Решение
Долго я возился с отключением проверки, в сети все способы не помогали (по крайней мере на моем самоподписанном сервере) и ява плевалась ошибками, помог только такой код
1
|
|||||||
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
|||
| 10.10.2019, 12:44 [ТС] | |||
|
В итоге Сергей может вначале представившись Петей разослать всем ключи, а потом общаться со всеми от его имени - и слать всякую похабщину (вроде вирусни) без вреда для своей репутации и во вред Пети в конечным пользователям. То есть я не доверяю сообщению, но доверяю ключу, которое тоже является сообщением?.. ________________________________________ ________________________________________ ___________ Но я еще не пытался доверится всем сертификатам (из других ответов в этой теме).
0
|
|||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 10.10.2019, 12:53 | ||
|
0
|
||
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||
| 10.10.2019, 12:54 [ТС] | ||
|
Результат: "java.io.IOException: Server returned HTTP response code: 401 for URL:" То есть теперь я нормально подключаюсь к серверу и получаю человеческие ошибки. Которые можно по-человечески править. ________________________________________ ______________ KEKCoGEN, но и за описание, как работает сертификат, спасибо - стало понятнее. И стало понятнее, что значит "довериться всем сертификатам". ________________________________________ ______________ Осталось только разобраться, как минимальным количеством кода, довериться всем сертификатам.
0
|
||
|
Модератор
|
||
| 10.10.2019, 13:05 | ||
|
0
|
||
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||
| 10.10.2019, 14:10 [ТС] | ||
|
0
|
||
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
|||||||||||||||||||||
| 11.10.2019, 17:34 [ТС] | |||||||||||||||||||||
|
Понять бы теперь, как с этим яндексом работать...
Но это уже совсем другая история.
0
|
|||||||||||||||||||||
|
|
||||||||||||
| 11.10.2019, 17:44 | ||||||||||||
0
|
||||||||||||
|
Модератор
|
||||||||||||||||
| 11.10.2019, 22:36 | ||||||||||||||||
|
К чему такие сложности? И нафига столько заголовков? Имхо пойдет минимум заголовков, это токен и тип контента для гет, а для пост еще длинну контента (длинна байт от тела). Тело пост запроса передается в стрим соединения и у вас пост не пройдет, там надо устанавливать метод дуаутпут в тру. Вы ведь не браузер эмулируете, остальные заголовки лишние.
Да и думаю и гет и пост тоже в данном случае излишне, я только с апи переводчика имел дело и там гет/пост делали одно и тоже, только у гет все параметры в адресе а у пост в теле (со всеми плюсами и минусами вытекающими). А вообще стоит сделать один метод принимающий токен, адрес и тело запроса в случае пост и возвращающее строку json ответ. И строку парсить уже вне. Чуть позже могу накидать код. Токен не советовал бы светить, советую модератору стереть в коде его, это инфа не для чужих глаз. Добавлено через 3 часа 30 минут Вот здесь имеет место делать отдельный метод для соединения, так как ему передаются параметры Столько заголовков имелось в виду что зачем делать спец обработку? Если можно послать только нужное и не заморачиваться
Я не умею и не люблю использовать всякие лямбды и стримы. Мне понятней и приятней функциональное программирование из чистого Си. Весь код пишу в этом духе. если надо передать полноценный пост запрос то надо добавить
А так по сути это get запрос, ведь у post обычно есть тело (код чуть выше). На сайте яндекса нашел опечатки, так что возможно и это тоже. get запрос это когда все передаваемые данные на сервер в адресе post запрос это обычно короткий адрес и все данные в теле запроса после заголовков. И у вас в коде не тот адрес, нужен этот api-metrika.yandex.net (по крайней мере везде в описании апи он)
0
|
||||||||||||||||
|
-12 / 3 / 0
Регистрация: 02.04.2012
Сообщений: 347
|
||
| 11.10.2019, 23:17 [ТС] | ||
|
На самом деле я написал тот пост больше "для себя", чтобы вынести код за пределы рабочего компа. Если бы скинул письмом себе на почту - меня бы поругали. А так - никто не обратит внимания. А настоящего хищения я не произвожу.
Не ожидал получить столько ответов. Буду смотреть на чужой код - разбираться, как можно улучшить свою прогу. Добавлено через 4 минуты А вот counter я бы попросил удалить.
0
|
||
| 11.10.2019, 23:17 | |
|
Помогаю со студенческими работами здесь
16
Написание прокси сервера на сокетах. Проброс сообщений основному серверу и возврат значений через прокси Не достучаться до оборудования, подключенного через 3G модем Не могу достучаться до лога через контекст сервлета Как достучаться до псевдоэлемента через потомка (использование hover)? Конфигурация cisco: достучаться через циску другого второстепенного сервера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|