Я занимаюсь разработкой приложения для 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
У меня возникло несколько проблем:
- При попытке подключения выдается исключение: "Внутренняя ошибка TLS, это может быть атака". Я отладил, и он выдается, когда Bouncycastle выполняет проверку версии через TlsUtils.checkVersion (InputStream есть, обработчик TlsProtocolHandler). Я пытался найти причину этого, но не могу определить, что происходит. Я также получаю то же исключение при попытке подключиться к другому (доверенному) сайту с поддержкой HTTPS.
- AlwaysValidVerifyer устарел. Javadoc утверждает, что «Выполнить проверку сертификата в реализации TlsAuthentication», но я не могу найти примеры того, как это сделать - кто-нибудь может помочь с примером?
- Я пытался найти библиотеки HTTPS, совместимые с J2ME, но не смог найти ничего, кроме Bouncycastle - кто-нибудь может предложить другую библиотеку?
Любая помощь очень ценится
Будет