![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Fameing |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.2.2006 Где: Ukraine. Kiev Репутация: нет Всего: 2 |
Как получить всю страницу в буфер по HTTPS сейчас изпользую так :
|
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Данный код у меня работал:
Добавлено @ 11:34 Сорри, Fameing, прозевал что по HTTPS надо.... Это сообщение отредактировал(а) MoonCat - 14.4.2006, 11:23 |
|||
|
||||
Fameing |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.2.2006 Где: Ukraine. Kiev Репутация: нет Всего: 2 |
Да а как это можно реализовать с HTTPS?
Плиз помогите. ![]() ![]() ![]() Это сообщение отредактировал(а) Fameing - 14.4.2006, 15:58 |
|||
|
||||
Fameing |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.2.2006 Где: Ukraine. Kiev Репутация: нет Всего: 2 |
Уже пробывал добавить сертификат вручную.
![]()
|
|||
|
||||
Goliath |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 1.3.2005 Репутация: нет Всего: 5 |
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] |
|||
|
||||
powerOn |
|
||||||||||||||||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Использование защищенного соединения на основе SSL сокетов. Протокол SSL предназначен для организации защищенного сетевого соединения. Протокол SSL может быть использован как промежуточный протокол между HTTP и TCP/IP, поэтому его применение HTTP клиентами будет "прозрачно". Чтобы установить связь по протоколу SSL средствами JAVA требуется создать SSL сокеты, которые в последствии используются как обыкновенные. Для этого требуется выполнить след. шаги. 1) Создание защищенных сертификатов для клиента и сервера. 2) Создание сервера (имеет серверный SSL сокет). 3) Создание клиента (имеет клиентский SSL сокет). Создание защищенных сертификатов для клиента и сервера. Создание защищенных сертификатов можно произвести с помощью утилиты KeyTool входящей в состав JDK. Нам потребуется создать два хранилища ключей: для клиента и для сервера. В каждых из них должны находиться по сертификату: серверному и клиентскому, что бы оде стороны, обменивающиеся информацией могли друг друга опознать. Создадим хранилище ключей для сервера, сгенерируем ключ, подпишем его, и экспортируем клиенту. Для клиента выполним аналогичные действия. /// Создаем ключ для сервера
/// Создаем ключ для клиента
/// Подписываем ключ клиента.
/// Подписываем ключ сервера.
/// Экспортируем сертификат сервера в хранилище клиента.
/// Экспортируем сертификат клиента в хранилище сервера.
Далее просмотрим содержимое хранилищ, для уверенности. /// Для серверного хранилища.
/// Для клиентского хранилища.
Очевидно, что каждое из хранилищ содержит по собственному подписанному ключу и доверенному сертификату будущего собеседника. Осталось раздать хранилища клиенту и серверу, т.е. чтобы во время выполнения программы они могли найти свои хранилища ключей. Поместите их, к примеру, в одну папку с клиентом и сервером соответственно. Создание Сервера
Создание Клиента
Код подробно прокомментирован, но суть в следующем: сначала происходит настройка SSLContext необходимыми для аутентификации сертификатами, а потом создаются клиентский и серверный SSL сокеты. После создания с ними можно работать как с простыми сокетами, передавать в них информацию, но она будет шифроваться не заметно для нас. Только если скорость передачи данных несколько упадет. Запустите сервер а потом клиент. Клиент должен получить ответ от сервера в виде строки: Sending simple string to socket. Желаю успеха! (если модераторы не против, то можно оформить как статью для FAQ :-)) Это сообщение отредактировал(а) LSD - 15.4.2006, 11:53 |
||||||||||||||||||||
|
|||||||||||||||||||||
Goliath |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 1.3.2005 Репутация: нет Всего: 5 |
Рульное описание
![]() --------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Не против ![]() Спасибо за статью! -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Урааа!!! ![]() |
|||
|
||||
Fameing |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.2.2006 Где: Ukraine. Kiev Репутация: нет Всего: 2 |
Большое спасиб.
|
|||
|
||||
Mikkie |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 21.3.2006 Репутация: нет Всего: нет |
Классная статья!
спасибо |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
powerOn, спасибо за отличный туториал!
В свою очередь добавлю генерацию ключей, описанную в туториале powerOn'a на Ant'е, которую написал по долгу службы. Комменты везде есть. Если коротко- заполняем часть properties по вкусу данными для сервера и клиента и выполняем ant ssl
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Чтобы туториал завершить... Не подскажете, как сгенеренные сертификаты использовать через HTTPURLConnection на клиенте и TomCat на сервере. (Думаю, это стандартный вариант коммуникации апплет-сервер).
|
|||
|
||||
ZeusX |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
sergejzr,
+1 |
|||
|
||||
Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 1 Всего: 25 |
Можно просто юзать в приложении org.apache.commons.httpclient тогда никаких заморочек не надо, будет работать одинаково что для http, что для https, проверено мной лично
![]() коннектился к https://uslugi.beeline.ru и имея логин и пасс свободно гулял по сайту, считывал нужные мне данные, парсил и выдавал в удобном виде -------------------- ![]() |
|||
|
||||
pompei |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: нет Всего: 6 |
Когда используем URLConnection то переход на https с http будет прозрачным, просто меняем урл на урл с https-протоколом, и ВСЁ! (не нужно никаких System.setProperty и прочей ерунды) Казалось бы просто, но у некоторых это не работает - возникает ошибка.... На самом деле всё работает, просто эта ошибка предусмотрена разработчиками, верней самой концепцией безопасности. Протокол HTTPS подразумевает, что вы будете работать только с заранее зарегистрированными сертификатами, т.е. с теми сертификаторами, которым вы доверяете. Ну а так как вы ещё ни чего не говорили по поводу того, кому вы доверяете, а кому нет, то система думает, что вы никому ни чего не доверяете, и все обрубает при работе с HTTPS. Короче нужно зарегистрировать, те сертификаты к кому вы обращаетесь. На заметку: когда происходит коннект по протоколу HTTPS, то вначале клиент и сервер обмениваются сертификатами, потом проверяют эти сертификаты, и только потом уже обмениваются данными. Как получить сертификат у сервера? Как его зарегистрировать? - это хорошие вопросы... я в них сейчас разбираюсь. Когда разберусь напишу сюда... а ещё лучше если кто-нибудь напишет а я прочитаю...... ![]() --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
pompei |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: нет Всего: 6 |
Для того чтобы зарегистрировать новый сертификат для работы с https протоколом в java необходимо выполнить команду: keytool -import -alias <алиас сертификата в keystore> \ -file <файл сертификата> \ -keystore <файл keystore> где <файл keystore> - файл в котором хранятся сетификаты по алиасам (хранилище сертификатов) <алиас сертификата в keystore> - это уникальный идентификатор сертификата на уровне хранилища - я ввел абру-кадабру (и всё работало замечательно) По умолчанию JVM держит своё хранилище сертификатов в файле: $JAVA_HOME/jre/lib/security/cacerts (Его можно поменять с помощью какой-то System.setProperty... но это делать вредно) Когда я натравил keytool на этот файл, у меня ничего не получилось (он потребовал пароль, который я не знаю) Поэтому я стёр этот файл и запустил команду ещё раз (которая указывала на только что стёртый файл) Он потребовал уже не ввести пароль, а выбрать новый (и подтветдить его) Дальше я запустил свою программу и всё заработало, так же как и раньше по http, но уже по https!!!! * * * Для плучения сертификата можно, например, воспользоваться FireFox-ом: Edit -> Preferences -> Advanced -> Encryption -> View Certificates -> Servers -> AddException Здесь вводим домен с https Нажимаем Get Certificate Потом View -> Details -> Export... сохраняем в файл - это и будет <файл сертификата> --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
Anatret |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 18.9.2007 Репутация: нет Всего: нет |
Подскажите плиз. Я не пойму где лежит ClientKeyStore раз его подгружают как фаил. Если делать как указанно выше в примере,
то выдает ошибку
а вот что лежит у меня в ClientKeyStore
|
||||||
|
|||||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: нет Всего: 39 |
FileInputStream fis = new FileInputStream("/billing/www/cbadmin_ora/ClientKeyStore");
|
|||
|
||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
ДОброго времени суток!
У меня проблема в следующем. Есть https сервер, я ему посылаю POST запрос с определенными параметрами, он мне в ответ должен прислать url-encoded строку вида param=value. Так вот, как мне получить эту самую строку от него? Делаю вот так:
Пытался получить https-заголовки, но там ниче нету; пытался получить через con.getInputStream() - там вроде возвращаются какие то числа, но их что то маловато для ответа... Или может я неверно посылаю запрос на сервер? т.е. может сперва нужно установить коннект с сервером (https://serverurl/), затем установить метод POST и уже потом тока отправлять запрос на этот url? каким тогда образом отправить запрос после url.openConnection()? |
|||
|
||||
Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 4 Всего: 16 |
Вы данные посылаете не POST-ом.
Вам надо: 1. Получить URLConnection 2. Вызвать setDoOutput(true) 3. Получить output stream 4. Записать туда то, что Вы хотите передать 5. Вызвать connect и getInputStream - только в этот момент запрос пойдет на сервер. |
|||
|
||||
ReFLeXive |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Спасибо за отклик! Сейчас попробую!!! |
|||
|
||||
ReFLeXive |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 30.3.2009 Где: г. Уфа Репутация: нет Всего: 1 |
Видимо я по прежнему не до конца все понимаю и делаю не так.
Вот что я переделал:
Сервер мне постоянно выдает, что ему не хватает обязательных параметров. Получается, что мои значения из urlString до сервера не доходят. Как правильно посылать параметры запроса к серверу? Может быть, нужно делать какой-нибудь URLEncoder.encode() c каждым параметров в отдельности или для запроса в целом? Добавлено через 6 минут и 12 секунд Все кажется разобрался с этим! Я забыл, что надо делать
для BufferedWriter |
||||
|
|||||
Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 4 Всего: 16 |
А почему у Вас первый параметр с вопросом? Вы же не query string создаете.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |