Bouncycastle HTTPS, игнорируя проблемы проверки сертификата - PullRequest
2 голосов
/ 15 декабря 2011

Я занимаюсь разработкой приложения для BlackBerry (OS 5), которому нужно сделать HTTPS-вызов серверу. Сервер имеет самозаверяющий сертификат. Я не могу игнорировать или подавлять ошибки проверки на стороне BlackBerry, используя только доступные классы J2ME, поэтому я хочу использовать легкую библиотеку TLS Bouncycastle для достижения этой цели.

Мой код:

SocketConnection sc = (SocketConnection) Connector.open("https://<myserversite>");
TlsProtocolHandler tlsHandler = new TlsProtocolHandler(sc.openInputStream(),         
sc.openOutputStream());
CertificateVerifyer cv = new AlwaysValidVerifyer();
tlsHandler.connect(cv);
DataOutputStream writer = new DataOutputStream(tlsHandler.getOutputStream());
InputStream inputStream = tlsHandler.getInputStream();

Я использую облегченный API Bouncycastle, версия 1.46, с Java 1.6

У меня возникло несколько проблем:

  1. При попытке подключения выдается исключение: "Внутренняя ошибка TLS, это может быть атака". Я отладил, и он выдается, когда Bouncycastle выполняет проверку версии через TlsUtils.checkVersion (InputStream есть, обработчик TlsProtocolHandler). Я пытался найти причину этого, но не могу определить, что происходит. Я также получаю то же исключение при попытке подключиться к другому (доверенному) сайту с поддержкой HTTPS.
  2. AlwaysValidVerifyer устарел. Javadoc утверждает, что «Выполнить проверку сертификата в реализации TlsAuthentication», но я не могу найти примеры того, как это сделать - кто-нибудь может помочь с примером?
  3. Я пытался найти библиотеки HTTPS, совместимые с J2ME, но не смог найти ничего, кроме Bouncycastle - кто-нибудь может предложить другую библиотеку?

Любая помощь очень ценится

Будет

1 Ответ

0 голосов
/ 14 мая 2013

Изменить

SocketConnection sc = (SocketConnection) Connector.open("https://<myserversite>");

На

SocketConnection sc = (SocketConnection) Connector.open("socket://<myserversite>:443");
...