В настоящее время я пытаюсь разработать небольшую утилиту, которая отправляет http-запрос на указанный URL-адрес https. Я попытался отладки, установив системное свойство "java.net.debug" в "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 ............@...
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:
Что ж, после гораздо большего количества тестов я обнаружил, что машина, на которой я работал, не может получить доступ к прокси, как мне сказали. Однако эта информация поступила непосредственно от сотрудников службы безопасности. Все, кроме них, думали, что это возможно.