Модераторы: javastic, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще раз о https... 
:(
    Опции темы
satellite
Дата 16.11.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



Привет всем. Прочитал несколько тем на форуме, но конкретного решения так и не нашел.
Пишу такую программку:
Код

import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpsConnection;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
 *
 * @author  Vladimir
 * @version
 */
public class Midlet extends MIDlet
{
    private InputStream IS;
    private HttpsConnection HC;
    public void startApp() 
    {
        try {
            HC = (HttpsConnection) Connector.open("https://eurasiasat.satgate.ru/index.php");
            System.out.println("OK 1");
        } catch (IOException ex) {
            System.out.println(ex);
        }
        try {
            IS = HC.openInputStream();
            System.out.println("OK 2");
        } catch (IOException ex) {
            System.out.println(ex);
        }
    }
    
    public void pauseApp() 
    {
    }
    
    public void destroyApp(boolean unconditional) 
    {
    }

    
}



При выполнении генерируется исключение - javax.microedition.pki.CertificateException: Certificate was issued by an unrecognized entity

Как я понимаю, сертификат, полученный с сайта является незнакомым. 
Если я запускаю мидлет на своей NOKIA N72, то в момент соелинения появляется вопрос - Сертификат незнакомый, принять?, - я жму принять и соединение идет дальше. На других телефонах вопросов не появляется, а программа просто виснет.
Если я открываю страницу на компе интернет-эксплорером, то могу скачать сертификат. Возможно ли импортировать его в мидлет (дать понять мидлету, что сертификат надежный), чтобы исключение не формировалось? Или есть другое решение?
Заранее спасибо.


PM MAIL   Вверх
W0LF
Дата 16.11.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Ну, скачиваешь ты не сертификат, а ключ, которым подписываешь, и если у тебя есть такой сертификат в телефоне, то будет все ок, а если нет - то плохо. 
Поэтому можно сгенерить свой сертификат, и подписать им, но я не знаю, как в телефон его потом залить :(


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
satellite
Дата 25.11.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



Проверку сертификата с сервера можно реализовать через интерфейс Certificate (или класс certificate). Там есть такие возможности. Вот только как применить этото класс я пока не понял. Класс абстрактный, нужно переопределить методы.
PM MAIL   Вверх
satellite
Дата 3.12.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



Цитата(W0LF @ 16.11.2007,  14:53)
Ну, скачиваешь ты не сертификат, а ключ, которым подписываешь, и если у тебя есть такой сертификат в телефоне, то будет все ок, а если нет - то плохо. 
Поэтому можно сгенерить свой сертификат, и подписать им, но я не знаю, как в телефон его потом залить :(

Мне удалось импортировать сертификат с сервера в телефон, в списке сертификатов телефона он прописан и ему все разрешено. Но ничего не изменилось. Я уже и приложение подписывал определенным сертификатом, который был также и в телефоне, но результата никакого. Похоже проблема нерешаема )))
PM MAIL   Вверх
VOS
Дата 4.12.2007, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 31.1.2007

Репутация: 6
Всего: 8



Уточните пару моментов:

1) Какой сертификат у Вас установлен на сервере? Самоподписанный или подписанный Verisign/Thawte?
2) Каким сертификатом Вы подписали мидлет (сертификат разработчика)? Опять же или Вы сгенерили его и потом отправили на подпись в УЦ, или загнали в телефон как корневой сертификат?

Полагаю, все должно работать, если:

Ваш мидлет подписан сертификатом разработчика, удостоверенным тем УЦ (удостоверяющим центром) Verisign/Thawte корневой  сертификат которого есть в Вашем телефоне.
На сервере используется сертификат, опять же подписанный УЦ.

В этом случае приложение  должно работать на любом MIDP 2.0 телефоне.
В противном случае Вам действительно придется всякими спец. сердствами загонять свои сертификаты в телефон, что для большинства пользователей является неразрешимой проблемой.
Если по каким-то причинам Вам не хочется использовать подобную схему (например Вы не хотите, чтобы Ваш клиент ежегодно платил за сертификат для своего сервера), то Вы в принципе можете реализовать самостоятельный защищенный протокол, используя, например, библиотеку Bouncy Castle. Но в этом случае Вам необходимо учитывать действующее законодательство. 

PM MAIL   Вверх
satellite
Дата 5.12.2007, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



VOS спасибо за ответ

Цитата

Какой сертификат у Вас установлен на сервере? Самоподписанный или подписанный Verisign/Thawte?


Сертификат подписан Equifax Secure Global eBusiness CA-1. Сервер, на который заходит мой мидлет принадлежит определенной компании и я не могу управлять ее сертификатами. Т.е. он есть и под него нужно мне подстроиться.

Цитата

Каким сертификатом Вы подписали мидлет (сертификат разработчика)?


Я пытался генерить свой сертификат, кидать его в телефон и подписывать им мидлет. Также пытался подписывать сертификатом, по моему Халмера или что-то в этом роде. В любом случае я думаю, что если мидлет подписан сертификатом, который есть в телефоне то по идее все должно работать. Пока что ничего не работало - но возможно я где-то что-то неправильно делаю.
PM MAIL   Вверх
VOS
Дата 6.12.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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 проверил сертификат Вашего сервера, значит теперь Вы можете доверять и ему.

Это если кратко и грубо ;)
PM MAIL   Вверх
satellite
Дата 10.12.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



to VOS:
И все-таки....что нужно , чтобы все работало по HTTPS?
В телефоне должен быть установлен сертификат(ключ) сервера, с которым будет общаться мидлет - и этого достаточно? Или мидлет тоже должен быть подписан каким-то сертификатом?
PM MAIL   Вверх
VOS
Дата 11.12.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 31.1.2007

Репутация: 6
Всего: 8



Мидлет тоже должен быть подписан. 
Аналогично как в обычном броузере на PC. Когда вы устанавливаете какой-нибудь апплет или ActiveX он говорит, эта прога сделана тем-то и тем-то, что  подтверждается тем то. Установить?

В мобиле по умолчанию  повыше безопасность, поэтому не доверяют всяким левым прогам. 

Например, я хакер и выяснил, что есть клевый мидлет, позволяющий играть в сетевую игру, но за $ или это какой-нибудь online trading и т.д. 
Если этот мидлет не подписан, то я делаю мидлет с тем же именем. Размещу его где-нибудь, накидаю в форумах на него ссылок, типа рулез и т.д. Притом ссылок, как Вы думаю знаете, можно набросать неочевидных, но это уже хакерские методы, другой топик.
Подмену сервера не так легко сделать, как иногда можно об этом услышать, но тоже возможно, если это не https протокол с
_нормальным_ сертификатом.
Дальше юзер качает его, вводит свой логин/пароль и мидлет  отправляет их на мой сервер/почту и т.д, а потом
говорит, типа вам надо обновить версию и отправляет Вас на скачку уже реального. А пароль/логин хакер уже получил.

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

Соответственно считается, если Вы юзаете https, то Вы работаете с важными данными, а значит см. выше.

P.S. Все немного сумбурно, времени нет подробнее написать.
PM MAIL   Вверх
satellite
Дата 12.12.2007, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



to VOS

В конечном итоге мне всего лишь нужно парсить страницу с HTTPS сервера, т.е. считать ее и разобрать. Настоящая Opera подписана сертификатом, а вот ее русский мод не подписан вообще. Однако он открывает HTTPS страницы, значит есть какой-то метод считать страницу HTTPS ? Пусть это будет уже не защищенное соединение, задача - просто считать данные.
Использовать HttpConnection вместо HttpsConnection я пробывал, не помогает...
PM MAIL   Вверх
VOS
Дата 12.12.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 31.1.2007

Репутация: 6
Всего: 8



Конечно есть. Можно самостоятельно реализовать SSL протокол. 
В принципе там ничего особо сложного нет, более того реализацию практически всех необходимых для этого модулей можно 
найти, например, в библиотеке Bouncy Castle (а может там и готовая реализация есть, давно ее не юзал).
Т.е. соединение делать не через HttpConnection/HttpsConnection а через сокеты. Поверх них реализовать SSL протокол.
Тогда никаких проблем не возникнет.
Возможно они пошли по этому пути.
В принципе сделать подобный модуль и мне было бы интересно, пригодился бы, думаю. Но, блин, конец года, сами понимаете, времени нет.
Так бы с удовольствием поучаствовал в создании такой библиотечки. Попробуйте погуглить, может есть уже готовый или заготовки какие.
Если найдете, не забудьте поделиться smile
PM MAIL   Вверх
satellite1977
Дата 12.12.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 7.8.2007

Репутация: нет
Всего: нет



 smile 

Это сообщение отредактировал(а) satellite1977 - 13.12.2007, 02:28
PM MAIL   Вверх
satellite
Дата 13.12.2007, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 19.9.2006

Репутация: нет
Всего: нет



Ну вот я и применил сокет:

Код

public class Midlet extends MIDlet
{
    SocketConnection SC = null;
    InputStream IS = null;
    OutputStream OS = null;
    public void startApp() 
    {
        try {
       
             SC = (SocketConnection) Connector.open("socket://eurasiasat.satgate.ru:443");
             System.out.println("OK");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        try {
            OS = SC.openOutputStream();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        try {
           
            OS.write("GET https://eurasiasat.satgate.ru/index.php HTTP/1.0\r\n\r\n".getBytes());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        try {
            IS = SC.openInputStream();
            System.out.println("InputStream Opened");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        StringBuffer SB = new StringBuffer();
        for (int i = 0; i < 15000; i++)
        {
            try {
                SB.append((char)IS.read());
            } catch (IOException ex) {
                System.out.println(ex + "Cant read");
            }
        }
        System.out.println(SB.toString());
        
    }


На этапе IS.read вылетает java.io.IOException: error 10054 during TCP read. Как я понял, это происходит именно из-за того, что сервер Https. Вот теперь и нужно реализовать SSL )))

Это сообщение отредактировал(а) satellite - 13.12.2007, 02:25
PM MAIL   Вверх
eugine_s
Дата 13.12.2007, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



satellite,  не очень хороший код у тебя получился.

1. В startApp() не стоит перезагружать "тяжелым" кодом.
2. В startApp() нельзя запускать процессы которые могут привести к deadlock-ам (тупиковым ситуациям), да и вообще работу с сокетом нужно делать в отдельном потоке.



Это сообщение отредактировал(а) eugine_s - 13.12.2007, 15:04
PM MAIL   Вверх
satellite1977
Дата 13.12.2007, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 7.8.2007

Репутация: нет
Всего: нет



 smile 

Это сообщение отредактировал(а) satellite1977 - 13.12.2007, 15:00
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.