2011-09-07 6 views
1

현재 주어진 https URL로 http 요청을 보내는 작은 유틸리티를 개발하려고합니다. 나는 시스템 속성 "java.net.debug"를 "ssl"로 설정하여 디버깅을 시도했다. 그러나 연결의 다른쪽에 누가 있는지 알 수있는 방법이 있는지 알고 싶습니다. 이것은 내 문제가 프록시 (내가 사용해야하는) 또는 대상 자체로 인한 것인지를 발견 할 수 있도록 중요합니다. 이것이 가능한가?자바 : 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를 제거하여 수정할 수 있습니다. 그러나 둘 다 왜 신비한 존재인가.