2011-09-07 52 views
1

我目前正在嘗試開發一個小型實用程序,它可以向給定的https url發送http請求。我已經嘗試通過將系統屬性「java.net.debug」設置爲「ssl」進行調試。但是,我想知道是否有方法知道誰在連接的另一端。這很重要,以便我可以瞭解我的問題是由於代理(我必須使用)還是由於目標本身。這可能嗎?Java:SSL身份驗證/ SSL調試問題

我很樂意提供任何其他可能有助於解決此問題的信息。 (這已經花了我很長的時間,我非常想看到它在我身後)

另外,我將在下面發佈我的錯誤輸出的提取(在嘗試連接時使用「ssl」調試標誌通過代理)。

由於任何人誰可能有想法,建議,資源幫助等

Error output (extract): 
trigger seeding of SecureRandom 
done seeding SecureRandom 
main, setSoTimeout(0) called 
Allow unsafe renegotiation: false 
Allow legacy hello messages: true 
Is initial handshake: true 
Is secure renegotiation: false 
%% No cached client session 
*** ClientHello, TLSv1 
RandomCookie: GMT: 1315387357 bytes = { 204, 54, 224, 210, 62, 4, 115, 194, 63, 143, 61, 163, 43, 167, 63, 217, 104, 166, 123, 152, 32, 226, 42, 143, 191, 249, 183, 192 } 
Session ID: {} 
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 
Compression Methods: { 0 } 
*** 
[write] MD5 and SHA1 hashes: len = 75 
0000: 01 00 00 47 03 01 4E 67 38 DD CC 36 E0 D2 3E 04 ...G..Ng8..6..>. 
0010: 73 C2 3F 8F 3D A3 2B A7 3F D9 68 A6 7B 98 20 E2 s.?.=.+.?.h... . 
0020: 2A 8F BF F9 B7 C0 00 00 20 00 04 00 05 00 2F 00 *....... ...../. 
0030: 33 00 32 00 0A 00 16 00 13 00 09 00 15 00 12 00 3.2............. 
0040: 03 00 08 00 14 00 11 00 FF 01 00     ........... 
main, WRITE: TLSv1 Handshake, length = 75 
[write] MD5 and SHA1 hashes: len = 101 
0000: 01 03 01 00 3C 00 00 00 20 00 00 04 01 00 80 00 ....<... ....... 
0010: 00 05 00 00 2F 00 00 33 00 00 32 00 00 0A 07 00 ..../..3..2..... 
0020: C0 00 00 16 00 00 13 00 00 09 06 00 40 00 00 15 [email protected] 
0030: 00 00 12 00 00 03 02 00 80 00 00 08 00 00 14 00 ................ 
0040: 00 11 00 00 FF 4E 67 38 DD CC 36 E0 D2 3E 04 73 .....Ng8..6..>.s 
0050: C2 3F 8F 3D A3 2B A7 3F D9 68 A6 7B 98 20 E2 2A .?.=.+.?.h... .* 
0060: 8F BF F9 B7 C0          ..... 
main, WRITE: SSLv2 client hello message, length = 101 
main, received EOFException: error 
main, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
main, SEND TLSv1 ALERT: fatal, description = handshake_failure 
main, WRITE: TLSv1 Alert, length = 2 
main, called closeSocket() 
main, IOException in getSession(): javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
main, called close() 
main, called closeInternal(true) 
main, called close() 
main, called closeInternal(true) 
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
    at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352) 
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) 
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) 
    at <my.fqdn.class>.run(EisRequestResponseMonitor.java:193) 
    at <my.fqdn.class>.main(EisRequestResponseMonitor.java:81) 

UPDATE: 由於我的職位,我能得到一些更多的信息。我的問題似乎確實與代理有關。當我看到我的調試信息時(錯誤被寫入日誌並且錯過了它),我收到了一個407 HTTP代碼。 我使用Apache的httpclient組件(此日期是4.1.2的最新版本),現在我正在努力正確「附加」我的憑證提供程序。我說「掙扎」,因爲我發現的所有例子都是針對版本3.x,並且自那時起api已經發生了變化。

UPDATE.V2: 好了,多了很多的測試後,我發現,有人告訴我做我的工作機器無法訪問代理。但是,這些信息直接來自安全人員。除了他們之外,其他人都認爲這是可能的。

回答

0

很奇怪的痕跡。正在編寫TLSv1和SSLv2 ClientHello消息,並且對等方肯定不接受後者,您可以通過從已啓用的協議中刪除SSLv2ClientHello來修復此問題。但爲什麼兩者都有一個謎。