私は、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....
:...............