Java和Windows - 通过HTTPS验证auth

时间:2012-02-14 18:43:31

标签: java windows ssl http-authentication

我使用Eclipse中的默认API通过HTTPS连接到服务器。我在我的密钥库中安装了链式证书。但是,Windows不喜欢它并引发certificate chaining error。在Ubuntu上,它实际上运行正常!

现在,在Windows上我有一个“hack”,我在这里看到它基本上创建了一个TrustManager来启用所有证书。目前,这很好。我将不得不稍后回到它,但是,我当前的问题是我的代码连接到服务器,使用uc.setRequestProperty("Authorization", "Basic " + encodedLogin);进行身份验证但返回我的表单的HTML代码,我实际上认为我正在登录首先。如果没有这一行,我会得到403

当我在浏览器中访问该网站时,会弹出一个登录框。当我登录时,它没有任何问题。当我单击Cancel并关闭登录框时,它将我带到了我的代码返回的确切HTML表单。所以要么我需要以某种方式登录到这个弹出框,要么我需要第二次验证登录到Web表单。我希望这是一个明确的解释。

我的最终目标显然是登录并将auth对象返回给我的代码,以便与网站进行进一步的通信。我只是被困在这个小小的傻瓜身上好几天了!非常感谢任何帮助!!

我附上了我的代码,以及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 个答案:

答案 0 :(得分:2)

HTTP授权与登录Web表单不同。

您已获得HTTP授权(即修复了403错误),因此您将获得所请求的页面,即登录页面。 HTML向您显示,为了登录表单,您需要在/mylogin.form URL上执行POST。目前,您正在对登录页面的URL进行GET。

服务器并行拥有两个不同的身份验证过程是不常见的。服务器可能配置错误。