BlackBerry не будет подключаться к некоторым веб-страницам с HTTPS - PullRequest
0 голосов
/ 13 марта 2020

Я пишу приложение Java для личного использования для системы BlackBerry 6.x.

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

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

Страницы, которые устройство полностью способно загрузить включают https://www.google.com.au и https://www.youtube.com.

Страницы, на которые устройство не может подключиться к , включая https://github.com и https://duckduckgo.com.

Примечания:

  • Эта проблема возникает как в эмуляторе BlackBerry, так и на физическом устройстве. В качестве физического устройства используется BlackBerry Curve 9300 под управлением BlackBerryOS 6.3. Эмулятор это нечто похожее. (Эмулятор 9600, поставляемый с BlackBerry 7.x JDK, также имеет те же проблемы.)
  • Страницы, которые не могут быть доступны через код Java с использованием HTTPS, также не могут быть доступны с помощью браузера по умолчанию в системе. Несмотря на то, что он может нормально подключаться к этим сайтам с помощью стороннего браузера Opera Mini.
  • Эта проблема возникает только при попытке использовать HttpsConnection вместо HttpConnection. Я могу подключиться к сайту, если я использую небезопасную HttpConnection, хотя я не могу использовать это sh.

Вот общий смысл того, что я пытаюсь запустить на устройство:

public static final String SITE_URL = "https://duckduckgo.com";

HttpsConnection conn = null;

try {
    // Create connection
    conn = (HttpsConnection) Connector.open(SITE_URL + ";deviceside=true;interface=wifi", 3, true);

    // Try print certificate information
    Certificate c = conn.getSecurityInfo().getServerCertificate();
    Dialog.alert("Issuer: " + c.getIssuer() + " subj:" + c.getSubject());

    // Getting response code opens connection, sends request,
    // and reads HTTP headers.
    int rcode = conn.getResponseCode();
    if (rcode != HttpsConnection.HTTP_OK) {
        throw new IOException ("HTTP response: " + rcode);
    }   
    Dialog.alert("Response: " + rcode);
} catch (ClassCastException e) {
    throw new IllegalArgumentException("Not a HTTP URL");
} catch (IOException e) {
    Dialog.alert("IOException: " + e.getMessage());
} finally {
    // Close connection and stream.
    if (is != null)   { is.close(); }
    if (conn != null) { conn.close(); }
}

Если я изменю SITE_URL на что-то, к чему я могу подключиться (https://www.google.com.au и др.), тогда код работает нормально и я получаю HTTP 200. Когда я пытаюсь подключиться, чтобы сказать, https://duckduckgo.com, программа просто генерирует IOException. (В частности, похоже, что это TLSIOException, если я перехватываю все соответствующие подклассы IOException) и возвращает ноль при вызове getMessage().

Спасибо,
Любая помощь или предложения приветствуются.

1 Ответ

1 голос
/ 01 мая 2020

Какая версия TLS требуется вашему серверу? BBOS довольно старый, и я считаю, что поддерживает только TLS 1.0 и SSL 3.0. Вы можете проверить, перейдя на этот сайт на вашем устройстве. https://clienttest.ssllabs.com: 8443 / ssltest / viewMyClient. html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...