2016-05-02 17 views
0

私は、HTTP Postへのメッセージの提出を自動化しようとしているツール(開発環境でのみ使用することを意図しています)を書いています。私の方法(下記)sendByHTTPSNaive()は、任意の証明書を受け入れるためにjavax.net.ssl.TrustManagerの素朴な実装を使用しています。 (これは開発テスト用です)401不正なコードが戻ってきています。以下は私の方法と私が信じているTLSハンドシェイクのデバッグ出力です。プロジェクトネットワークの人々は、単純なTrustManagerが処理しなければならないxmlゲートウェイに直面していると言いますが、他の認証はありません。私はいくつかのTLSのことなら、この問題をデバッグする方法のアイディアを使い果たしましたか、実際にはxmlゲートウェイ以外の認証レイヤーがありますか?フラグ-Djavax.net.debugを使用してJavaでHTTPS投稿を送信できません

public String sendByHTTPSNaive(String destinationURI, 
           String msgBodyContent) { 

    String result = "no response"; 
    try { 
     URL url = new URL(destinationURI); 
     // URLConnection con = url.openConnection(); 

     HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); 

     // specify that we will send output and accept input 
     con.setDoInput(true); 
     con.setDoOutput(true); 
     con.setConnectTimeout(20000); // long timeout, but not infinite 
     con.setReadTimeout(20000); 
     con.setUseCaches(false); 
     con.setDefaultUseCaches(false); 

     NoopHostnameVerifier HOSTNAME_VERIFIER = new NoopHostnameVerifier(); 
     TrustManager[] TRUST_MANAGER = { new NaiveTrustManager() }; 
     if (con instanceof HttpsURLConnection) { 

      SSLContext context = SSLContext.getInstance("TLS"); 
      context.init(new KeyManager[0], TRUST_MANAGER, 
              new SecureRandom()); 
      SSLSocketFactory socketFactory = context.getSocketFactory(); 
      ((HttpsURLConnection) con).setSSLSocketFactory(socketFactory); 
      ((HttpsURLConnection) con).setHostnameVerifier(HOSTNAME_VERIFIER); 
     } 

     // tell the web server what we are sending 
     con.setRequestProperty("Content-Type", "text/xml"); 
     OutputStreamWriter writer = new OutputStreamWriter(
             con.getOutputStream()); 
     writer.write(msgBodyContent); 
     writer.flush(); 
     writer.close(); 

     // reading the response 
     InputStreamReader reader = new InputStreamReader(con.getInputStream()); 
     StringBuilder buf = new StringBuilder(); 

     char[] cbuf = new char[2048]; 
     int num; 

     while (-1 != (num = reader.read(cbuf))) { 
      buf.append(cbuf, 0, num); 
     } 

     result = buf.toString(); 
    } catch (Throwable t) { 
     t.printStackTrace(System.out); 
    } 
    return result; 
} 

デバッグ出力は=あなたのTLSが正常に動作しているすべての

HTTP/1.1 401 Una 
uthorized..Serve 
r: Apache-Coyote 
/1.1..WWW-Authen 
ticate: Basic re 
alm="L7SSGBasicR 
ealm"..L7-Policy 
-URL: https://ab 
cdefghi.jklmno.c 
om:443/ssg/polic 
y/disco?serviceo 
id=20938758..Con 
tent-Length: 23. 
.Date: Thu, 28 A 
pr 2016 16:00:56 
GMT....Authenti 
cation RequiredC 
..._.2..5\"B.... 
:............... 

答えて

0

は、エラーがHTTPから来ています。リクエストとともに認証情報(具体的にはAuthorizationヘッダー)を入力する必要があります。応答には「WWW-Authenticate」ヘッダーが含まれています。これは、クライアントが資格情報を提供することに挑戦しています。クライアントは、適切な「Authorization」ヘッダーを使用して要求を繰り返すことになっています。

関連する問題