2012-02-14 5 views
1

EclipseのデフォルトAPIを使用してHTTPS経由でサーバーに接続しています。私はチェーン付きの証明書を私のキーストアにインストールしました。しかし、Windowsはそれを好きではなく、certificate chaining errorをスローします。 Ubuntuでは、実際にうまくいきます!JavaとWindows - HTTPSによる認証の問題

Windowsでは、ここで私が見た「ハック」が基本的にすべての証明書を有効にする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のWebフォーム

<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> 
+0

認証チェーンは、有効な認証機関からその下の特定のインスタンスまでのチェーンです。例えば。証明書に署名するSectionB証明書に署名するCompanyZ証明書に署名するVerisign。したがって、標準準拠のアプリケーションであれば、これにより却下を認識させることができます。 – Alfabravo

+0

コメントをいただきありがとうございますが、私のコードはUbuntuで動作します。私の知る限り、私の質問のその部分は、Windowsのkeytool /キーストアの問題です。来週、私はおそらくそれを振り返ります。 – eoinzy

答えて

2

HTTP認証は、Webフォームへのログインと同じものではありません。

リクエストされたページ(ログインページ)が表示されるように、HTTP認証が機能しています(つまり、403エラーが修正されました)。 HTMLは、フォームにログインするために/mylogin.form URLでPOSTを実行する必要があることを示しています。現在、ログインページのURLでGETを行っています。

サーバーが2つの異なる認証プロセスを並行して実行することは珍しいことです。サーバーが誤って構成されている可能性があります。

+0

参考までに、これは間違いありませんでした。サーバーは、同じ詳細で2つの別個のログインが必要でした。ブラウザでは、一度ログインすれば転送できます。私のプログラムでこれを行う方法がわからないので、私は2回、フォームPOSTを使って2回目にしました。 – eoinzy

関連する問題