![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Привет всем. Прочитал несколько тем на форуме, но конкретного решения так и не нашел.
Пишу такую программку:
При выполнении генерируется исключение - javax.microedition.pki.CertificateException: Certificate was issued by an unrecognized entity Как я понимаю, сертификат, полученный с сайта является незнакомым. Если я запускаю мидлет на своей NOKIA N72, то в момент соелинения появляется вопрос - Сертификат незнакомый, принять?, - я жму принять и соединение идет дальше. На других телефонах вопросов не появляется, а программа просто виснет. Если я открываю страницу на компе интернет-эксплорером, то могу скачать сертификат. Возможно ли импортировать его в мидлет (дать понять мидлету, что сертификат надежный), чтобы исключение не формировалось? Или есть другое решение? Заранее спасибо. |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Ну, скачиваешь ты не сертификат, а ключ, которым подписываешь, и если у тебя есть такой сертификат в телефоне, то будет все ок, а если нет - то плохо.
Поэтому можно сгенерить свой сертификат, и подписать им, но я не знаю, как в телефон его потом залить :( -------------------- iOS developer |
|||
|
||||
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Проверку сертификата с сервера можно реализовать через интерфейс Certificate (или класс certificate). Там есть такие возможности. Вот только как применить этото класс я пока не понял. Класс абстрактный, нужно переопределить методы.
|
|||
|
||||
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Мне удалось импортировать сертификат с сервера в телефон, в списке сертификатов телефона он прописан и ему все разрешено. Но ничего не изменилось. Я уже и приложение подписывал определенным сертификатом, который был также и в телефоне, но результата никакого. Похоже проблема нерешаема ))) |
|||
|
||||
VOS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 31.1.2007 Репутация: 6 Всего: 8 |
Уточните пару моментов:
1) Какой сертификат у Вас установлен на сервере? Самоподписанный или подписанный Verisign/Thawte? 2) Каким сертификатом Вы подписали мидлет (сертификат разработчика)? Опять же или Вы сгенерили его и потом отправили на подпись в УЦ, или загнали в телефон как корневой сертификат? Полагаю, все должно работать, если: Ваш мидлет подписан сертификатом разработчика, удостоверенным тем УЦ (удостоверяющим центром) Verisign/Thawte корневой сертификат которого есть в Вашем телефоне. На сервере используется сертификат, опять же подписанный УЦ. В этом случае приложение должно работать на любом MIDP 2.0 телефоне. В противном случае Вам действительно придется всякими спец. сердствами загонять свои сертификаты в телефон, что для большинства пользователей является неразрешимой проблемой. Если по каким-то причинам Вам не хочется использовать подобную схему (например Вы не хотите, чтобы Ваш клиент ежегодно платил за сертификат для своего сервера), то Вы в принципе можете реализовать самостоятельный защищенный протокол, используя, например, библиотеку Bouncy Castle. Но в этом случае Вам необходимо учитывать действующее законодательство. |
|||
|
||||
satellite |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
VOS спасибо за ответ
Сертификат подписан Equifax Secure Global eBusiness CA-1. Сервер, на который заходит мой мидлет принадлежит определенной компании и я не могу управлять ее сертификатами. Т.е. он есть и под него нужно мне подстроиться.
Я пытался генерить свой сертификат, кидать его в телефон и подписывать им мидлет. Также пытался подписывать сертификатом, по моему Халмера или что-то в этом роде. В любом случае я думаю, что если мидлет подписан сертификатом, который есть в телефоне то по идее все должно работать. Пока что ничего не работало - но возможно я где-то что-то неправильно делаю. |
||||
|
|||||
VOS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 31.1.2007 Репутация: 6 Всего: 8 |
В моем телефоне нет корневого сертификата Equifax Secure Global eBusiness CA-1,
соответственно на моем телефоне вряд ли (не гарантируется) работа с этим сервером. Думаю у Вас аналогично. Вам надо загрузить в свой телефон корневой сертифика Equifax Secure Global eBusiness CA-1. По большому счету это открытый ключ этой компании. Им будет проверена подпись под сертификатом Вашего сервера. Соответсвенно получается цепочка: Вы доверяете Equifax Secure Global eBusiness CA-1 (т.к. у Вас есть их открытый ключ и считается что Вы его получили от доверенного источника) Equifax Secure Global eBusiness CA-1 проверил сертификат Вашего сервера, значит теперь Вы можете доверять и ему. Это если кратко и грубо ;) |
|||
|
||||
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
to VOS:
И все-таки....что нужно , чтобы все работало по HTTPS? В телефоне должен быть установлен сертификат(ключ) сервера, с которым будет общаться мидлет - и этого достаточно? Или мидлет тоже должен быть подписан каким-то сертификатом? |
|||
|
||||
VOS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 31.1.2007 Репутация: 6 Всего: 8 |
Мидлет тоже должен быть подписан.
Аналогично как в обычном броузере на PC. Когда вы устанавливаете какой-нибудь апплет или ActiveX он говорит, эта прога сделана тем-то и тем-то, что подтверждается тем то. Установить? В мобиле по умолчанию повыше безопасность, поэтому не доверяют всяким левым прогам. Например, я хакер и выяснил, что есть клевый мидлет, позволяющий играть в сетевую игру, но за $ или это какой-нибудь online trading и т.д. Если этот мидлет не подписан, то я делаю мидлет с тем же именем. Размещу его где-нибудь, накидаю в форумах на него ссылок, типа рулез и т.д. Притом ссылок, как Вы думаю знаете, можно набросать неочевидных, но это уже хакерские методы, другой топик. Подмену сервера не так легко сделать, как иногда можно об этом услышать, но тоже возможно, если это не https протокол с _нормальным_ сертификатом. Дальше юзер качает его, вводит свой логин/пароль и мидлет отправляет их на мой сервер/почту и т.д, а потом говорит, типа вам надо обновить версию и отправляет Вас на скачку уже реального. А пароль/логин хакер уже получил. Таких атак навскидку можно несколько десятков придумать. Поэтому: - если Вы работаете с важными данными - мидлет должен быть подписан и юзер должен знать, что устанавливать надо только такой милет. ну и т.д. Соответственно считается, если Вы юзаете https, то Вы работаете с важными данными, а значит см. выше. P.S. Все немного сумбурно, времени нет подробнее написать. |
|||
|
||||
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
to VOS
В конечном итоге мне всего лишь нужно парсить страницу с HTTPS сервера, т.е. считать ее и разобрать. Настоящая Opera подписана сертификатом, а вот ее русский мод не подписан вообще. Однако он открывает HTTPS страницы, значит есть какой-то метод считать страницу HTTPS ? Пусть это будет уже не защищенное соединение, задача - просто считать данные. Использовать HttpConnection вместо HttpsConnection я пробывал, не помогает... |
|||
|
||||
VOS |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 31.1.2007 Репутация: 6 Всего: 8 |
Конечно есть. Можно самостоятельно реализовать SSL протокол.
В принципе там ничего особо сложного нет, более того реализацию практически всех необходимых для этого модулей можно найти, например, в библиотеке Bouncy Castle (а может там и готовая реализация есть, давно ее не юзал). Т.е. соединение делать не через HttpConnection/HttpsConnection а через сокеты. Поверх них реализовать SSL протокол. Тогда никаких проблем не возникнет. Возможно они пошли по этому пути. В принципе сделать подобный модуль и мне было бы интересно, пригодился бы, думаю. Но, блин, конец года, сами понимаете, времени нет. Так бы с удовольствием поучаствовал в создании такой библиотечки. Попробуйте погуглить, может есть уже готовый или заготовки какие. Если найдете, не забудьте поделиться ![]() |
|||
|
||||
satellite1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 7.8.2007 Репутация: нет Всего: нет |
![]() Это сообщение отредактировал(а) satellite1977 - 13.12.2007, 02:28 |
|||
|
||||
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Ну вот я и применил сокет:
На этапе IS.read вылетает java.io.IOException: error 10054 during TCP read. Как я понял, это происходит именно из-за того, что сервер Https. Вот теперь и нужно реализовать SSL ))) Это сообщение отредактировал(а) satellite - 13.12.2007, 02:25 |
|||
|
||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
satellite, не очень хороший код у тебя получился.
1. В startApp() не стоит перезагружать "тяжелым" кодом. 2. В startApp() нельзя запускать процессы которые могут привести к deadlock-ам (тупиковым ситуациям), да и вообще работу с сокетом нужно делать в отдельном потоке. Это сообщение отредактировал(а) eugine_s - 13.12.2007, 15:04 |
|||
|
||||
satellite1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 7.8.2007 Репутация: нет Всего: нет |
![]() Это сообщение отредактировал(а) satellite1977 - 13.12.2007, 15:00 |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |