Java и Windows - проблема с аутентификацией через HTTPS - PullRequest
1 голос
/ 14 февраля 2012

Я использую API по умолчанию в Eclipse для подключения к серверу по HTTPS. В моем хранилище ключей установлены цепочки сертификатов. Однако Windows это не нравится и выдает certificate chaining error. На Ubuntu все работает нормально!

Теперь в Windows у меня есть "взлом", который я видел здесь, который в основном создает TrustManager, который включает все сертификаты. Пока это нормально. Мне придется вернуться к нему позже, но моя текущая проблема заключается в том, что мой код подключается к серверу, аутентифицируется с использованием uc.setRequestProperty("Authorization", "Basic " + encodedLogin);, но возвращает обратно HTML-код для моей формы, который, как я и думал, входил в систему. первое место. Без этой строки я получаю 403.

Когда я зашел на сайт в браузере, всплыло окно входа. Когда я вошел в систему, он вошел в меня без проблем. Когда я нажал Cancel и закрыл окно входа в систему, я перешел к той HTML-форме, которую возвращает мой код. Так что либо мне нужно как-то войти в это всплывающее окно, либо мне нужно пройти аутентификацию во второй раз, чтобы войти в веб-форму. Надеюсь, это достаточно ясное объяснение.

Моя конечная цель, очевидно, состоит в том, чтобы войти в систему и вернуть объект аутентификации обратно в мой код для дальнейшей связи с сайтом. Я просто застрял в этой маленькой чокнутой части на несколько дней! Любая помощь очень ценится!

Я приложил свой код, а также код формы HTML.

Спасибо.

Мой код:

try
{
    String login = "MyUser:MyPass";
    byte[] encodedLogin = new Base64().encode(login.getBytes());

    StringBuilder parsedContentFromUrl = new StringBuilder();
    HttpsURLConnection uc = (HttpsURLConnection) webURL.openConnection();

    //uc.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);
    uc.setRequestProperty("Authorization", "Basic " + encodedLogin);
    //uc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
    uc.connect();

    //uc.getInputStream();

    BufferedInputStream in = new BufferedInputStream(uc.getInputStream());
    //System.out.println(uc.getRequestProperty("WWW-Authenticate"));

    int ch;
    while ((ch = in.read()) != -1) {
       parsedContentFromUrl.append((char) ch);
    }
    System.out.println(parsedContentFromUrl);
}
catch (IOException e)
{
    System.out.println("IOException::"+e.getMessage());
    e.printStackTrace();
}

HTML веб-форма

<FORM METHOD=POST ACTION="/mylogin.form">
<FONT SIZE="+2">
<TABLE BORDER="0" WIDTH="400">
<TR>
<TD ALIGN="LEFT"><UL><LI>Username</LI></UL></TD>
<TD><INPUT NAME="username" SIZE="15"></TD>
</TR>
<TR>
<TD ALIGN="LEFT"><UL><LI>Password</LI></UL></TD>
<TD><INPUT TYPE="PASSWORD" NAME="password" SIZE="15"></TD>
</TR>
</TABLE>
</FONT>

<INPUT TYPE="HIDDEN" NAME="login-form-type" VALUE="pwd">

<BR><INPUT TYPE="SUBMIT" VALUE="Login">
</FORM>

1 Ответ

2 голосов
/ 15 февраля 2012

HTTP-авторизация - это не то же самое, что вход в веб-форму.

У вас работает HTTP-авторизация (т. Е. Исправлена ​​ошибка 403), поэтому вы получаете запрошенную страницу, которая является страницей входа. HTML-код показывает, что для входа в форму необходимо выполнить POST для URL-адреса /mylogin.form. В настоящее время вы делаете GET на URL для страницы входа в систему.

Для сервера необычно иметь два разных процесса аутентификации параллельно. Возможно, сервер неправильно настроен.

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