Сертификат клиента по умолчанию на BlackBerry - PullRequest
1 голос
/ 09 января 2012

Я пытаюсь подключиться к серверу, используя https, и когда я это делаю, он говорит, что для подключения требуется сертификат клиента.Если я нажму да, чтобы продолжить, я получу TLSAlertException.
Код подключения выглядит примерно так:

SecureConnection con = (SecureConnection)Connector.open("ssl://url:443");

Я посмотрел сертификаты на симуляторе (а также на устройстве) иклиентских (личных) сертификатов по умолчанию нет.Я попытался сгенерировать один с помощью кода, но я не знаю, как сделать так, чтобы он отображался в личных сертификатах телефона.

Я нашел этот , но ни один из вариантов не оченьЖелательно получить персональный сертификат на устройстве.

Итак, возможно ли получить персональный сертификат на симуляторе, в идеале через код?
Если я смогу получить его, будет ли SecureConnection использовать его автоматическипри подключении к серверу?
Если нет, то есть ли какие-нибудь библиотеки, которые могут это сделать?

1 Ответ

1 голос
/ 12 января 2012

Итак, после еще нескольких копаний я обнаружил TLS API Bouncy Castle . Короче говоря, кажется, что это работает до сих пор, но я собираюсь перечислить шаги, которые я прошел, потому что я наткнулся на несколько препятствий на этом пути.

Вы можете скачать исходный код, а также архивы файлов классов с http://www.bouncycastle.org/latest_releases.html. В разделе «Источники и Javadoc» есть ссылки на J2ME.

Сначала я попытался добавить cldc_classes.zip в качестве внешнего JAR-файла к пути сборки. Завершение кода для кода надувного замка теперь работало в Eclipse. Итак, я запустил симулятор, но когда я попытался запустить приложение, он выдал «Ошибка запуска приложения: модуль 'cldc_classes.zip' not found». Я искал и обнаружил, что проблема в том, что мне нужно было поставить галочку на вкладке «Порядок и экспорт» в настройке Build Path. Oops!

Итак, я проверил его и попытался запустить снова, но получил сообщение «Ошибка: предварительный сбой не прошел» еще до запуска симулятора. Еще несколько поисков показали, что мне пришлось предварительно проверить zip-файл, чтобы он работал, и казалось, что это будет достаточно просто.

Использование инструмента preverify выдает множество ошибок и предупреждений, которые выглядят так, как будто они как-то связаны с созданием дубликатов классов в пакете java. В часто задаваемых вопросах о Bouncy Castle они упомянули что-то вроде этого и предложили запутать код.

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

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

Пытаясь запустить сейчас, я получил "Ошибка ввода-вывода Eclipse: Невозможно запустить программу" jar ": Ошибка CreateProcess = 2". Некоторые поиски показали, что мне нужно добавить папку java jdk bin (что-то вроде C: \ Program Files \ Java \ jdk \ bin) в переменную среды PATH.

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

SocketConnection con = (SocketConnection)Connector.open("socket://url:443");
TlsProtocolHandler tph = new TlsProtocolHandler(con.openInputStream(), con.openOutputStream());
tph.connect(new AlwaysValidVerifier());
is = tph.getInputStream();
os = tph.getOutputStream();
...