knowm / XChange

XChange is a Java library providing a streamlined API for interacting with 60+ Bitcoin and Altcoin exchanges providing a consistent interface for trading and accessing market data.
http://knowm.org/open-source/xchange/
MIT License
3.87k stars 1.94k forks source link

Unsupported or unrecognized SSL message #4736

Closed stapik closed 1 year ago

stapik commented 1 year ago

Hello! I got an exception: javax.net.ssl.SSLException: Unsupported or unrecognized SSL message I create a project with only one dependency:

 <dependency>
            <groupId>org.knowm.xchange</groupId>
            <artifactId>xchange-gateio</artifactId>
            <version>5.1.0</version>
  </dependency>

Tried using gateio, binance, same problem. Run with Java 17, Windows. Log (-Djavax.net.debug=SSL,handshake,data,keymanager):

"C:\Program Files\Java\jdk-17\bin\java.exe" -Djavax.net.debug=SSL,handshake,data,keymanager "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.3\lib\idea_rt.jar=49853:C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\user\IdeaProjects\xchange-test\target\classes;C:\Users\user\.m2\repository\org\knowm\xchange\xchange-gateio\5.1.0\xchange-gateio-5.1.0.jar;C:\Users\user\.m2\repository\org\knowm\xchange\xchange-core\5.1.0\xchange-core-5.1.0.jar;C:\Users\user\.m2\repository\com\github\mmazi\rescu\2.1.0\rescu-2.1.0.jar;C:\Users\user\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.12.0\jackson-databind-2.12.0.jar;C:\Users\user\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.12.0\jackson-annotations-2.12.0.jar;C:\Users\user\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.12.0\jackson-core-2.12.0.jar;C:\Users\user\.m2\repository\jakarta\ws\rs\jakarta.ws.rs-api\2.1.5\jakarta.ws.rs-api-2.1.5.jar;C:\Users\user\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\user\.m2\repository\oauth\signpost\signpost-core\1.2.1.2\signpost-core-1.2.1.2.jar;C:\Users\user\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\user\.m2\repository\com\google\guava\guava\31.1-jre\guava-31.1-jre.jar;C:\Users\user\.m2\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;C:\Users\user\.m2\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;C:\Users\user\.m2\repository\org\checkerframework\checker-qual\3.12.0\checker-qual-3.12.0.jar;C:\Users\user\.m2\repository\com\google\errorprone\error_prone_annotations\2.11.0\error_prone_annotations-2.11.0.jar;C:\Users\user\.m2\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-all\1.7.0\resilience4j-all-1.7.0.jar;C:\Users\user\.m2\repository\io\vavr\vavr\0.10.2\vavr-0.10.2.jar;C:\Users\user\.m2\repository\io\vavr\vavr-match\0.10.2\vavr-match-0.10.2.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-ratelimiter\1.7.0\resilience4j-ratelimiter-1.7.0.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-core\1.7.0\resilience4j-core-1.7.0.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-circuitbreaker\1.7.0\resilience4j-circuitbreaker-1.7.0.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-bulkhead\1.7.0\resilience4j-bulkhead-1.7.0.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-retry\1.7.0\resilience4j-retry-1.7.0.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-cache\1.7.0\resilience4j-cache-1.7.0.jar;C:\Users\user\.m2\repository\javax\cache\cache-api\1.1.0\cache-api-1.1.0.jar;C:\Users\user\.m2\repository\io\github\resilience4j\resilience4j-timelimiter\1.7.0\resilience4j-timelimiter-1.7.0.jar;C:\Users\user\.m2\repository\org\slf4j\slf4j-api\2.0.6\slf4j-api-2.0.6.jar;C:\Users\user\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar App
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.276 UZT|SSLCipher.java:466|jdk.tls.keyLimits:  entry = AES/GCM/NoPadding KeyUpdate 2^37. AES/GCM/NOPADDING:KEYUPDATE = 137438953472
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.673 UZT|Utilities.java:74|the previous server name in SNI (type=host_name (0), value=data.gate.io) was replaced with (type=host_name (0), value=data.gate.io)
javax.net.ssl|INFO|10|main|2023-06-30 16:29:00.681 UZT|AlpnExtension.java:182|No available application protocols
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.681 UZT|SSLExtensions.java:272|Ignore, context unavailable extension: application_layer_protocol_negotiation
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.681 UZT|SessionTicketExtension.java:408|Stateless resumption supported
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.682 UZT|SSLExtensions.java:272|Ignore, context unavailable extension: cookie
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.694 UZT|SSLExtensions.java:272|Ignore, context unavailable extension: renegotiation_info
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.694 UZT|PreSharedKeyExtension.java:661|No session to resume.
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.694 UZT|SSLExtensions.java:272|Ignore, context unavailable extension: pre_shared_key
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.697 UZT|ClientHello.java:641|Produced ClientHello handshake message (
"ClientHello": {
  "client version"      : "TLSv1.2",
  "random"              : "175776E149021E9F4B33BD2BBF754B036C641C089EFB8F024FFE1757CE91FC4C",
  "session id"          : "E377DB81B8B530C054C97AA5A48BDC5887943316F4FF41B8FF6827BA2DBE0C0C",
  "cipher suites"       : "[TLS_AES_256_GCM_SHA384(0x1302), TLS_AES_128_GCM_SHA256(0x1301), TLS_CHACHA20_POLY1305_SHA256(0x1303), TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256(0xCCA9), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030), TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256(0xCCA8), TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xC02F), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256(0xCCAA), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x009E), TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(0x00A2), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(0xC024), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xC028), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(0xC02E), TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(0xC032), TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(0xC02D), TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(0xC031), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(0xC026), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(0xC02A), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(0xC025), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]",
  "compression methods" : "00",
  "extensions"          : [
    "server_name (0)": {
      type=host_name (0), value=data.gate.io
    },
    "status_request (5)": {
      "certificate status type": ocsp
      "OCSP status request": {
        "responder_id": <empty>
        "request extensions": {
          <empty>
        }
      }
    },
    "supported_groups (10)": {
      "versions": [x25519, secp256r1, secp384r1, secp521r1, x448, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
    },
    "ec_point_formats (11)": {
      "formats": [uncompressed]
    },
    "status_request_v2 (17)": {
      "cert status request": {
        "certificate status type": ocsp_multi
        "OCSP status request": {
          "responder_id": <empty>
          "request extensions": {
            <empty>
          }
        }
      }
    },
    "extended_master_secret (23)": {
      <empty>
    },
    "session_ticket (35)": {
      <empty>
    },
    "signature_algorithms (13)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, ed25519, ed448, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "supported_versions (43)": {
      "versions": [TLSv1.3, TLSv1.2]
    },
    "psk_key_exchange_modes (45)": {
      "ke_modes": [psk_dhe_ke]
    },
    "signature_algorithms_cert (50)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, ed25519, ed448, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "key_share (51)": {
      "client_shares": [  
        {
          "named group": x25519
          "key_exchange": {
            0000: 8B 91 89 C6 B5 54 D1 56   85 C9 6D C1 8F 66 28 3D  .....T.V..m..f(=
            0010: 0F FB 54 8F FB D3 70 B7   44 A6 E2 15 27 BD DA 27  ..T...p.D...'..'
          }
        },
        {
          "named group": secp256r1
          "key_exchange": {
            0000: 04 A2 15 3E 22 BC B9 E2   30 BC AD C8 61 C2 84 B8  ...>"...0...a...
            0010: 5F 58 8D 44 4B 78 59 3E   CF 84 95 5A 5C 79 E2 B4  _X.DKxY>...Z\y..
            0020: 69 ED 1D 4D 4C DA EA B9   0C 97 C1 39 E7 A9 E0 BC  i..ML......9....
            0030: 4A 85 8F C8 BB 25 52 07   93 7E 50 77 58 4E EB 09  J....%R...PwXN..
            0040: 41 
          }
        },
      ]
    }
  ]
}
)
javax.net.ssl|ERROR|10|main|2023-06-30 16:29:00.706 UZT|TransportContext.java:363|Fatal (UNEXPECTED_MESSAGE): Unsupported or unrecognized SSL message (
"throwable" : {
  javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
    at java.base/sun.security.ssl.SSLSocketInputRecord.handleUnknownRecord(SSLSocketInputRecord.java:451)
    at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:175)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:111)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1506)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1421)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426)
    at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:580)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1665)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
    at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:529)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308)
    at si.mazi.rescu.HttpTemplate.receive(HttpTemplate.java:145)
    at si.mazi.rescu.RestInvocationHandler.receiveAndMap(RestInvocationHandler.java:156)
    at si.mazi.rescu.RestInvocationHandler.invoke(RestInvocationHandler.java:113)
    at jdk.proxy2/jdk.proxy2.$Proxy14.getMarketInfo(Unknown Source)
    at org.knowm.xchange.gateio.service.GateioMarketDataServiceRaw.getBTERMarketInfo(GateioMarketDataServiceRaw.java:42)
    at org.knowm.xchange.gateio.GateioAdapters.adaptToExchangeMetaData(GateioAdapters.java:236)
    at org.knowm.xchange.gateio.GateioExchange.remoteInit(GateioExchange.java:43)
    at org.knowm.xchange.BaseExchange.applySpecification(BaseExchange.java:113)
    at org.knowm.xchange.ExchangeFactory.createExchange(ExchangeFactory.java:110)
    at org.knowm.xchange.ExchangeFactory.createExchange(ExchangeFactory.java:53)
    at App.main(App.java:7)}

)
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.706 UZT|SSLSocketImpl.java:1755|close the underlying socket
javax.net.ssl|DEBUG|10|main|2023-06-30 16:29:00.706 UZT|SSLSocketImpl.java:1781|close the SSL connection (passive)
Exception in thread "main" org.knowm.xchange.exceptions.ExchangeException: javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
    at org.knowm.xchange.BaseExchange.applySpecification(BaseExchange.java:115)
    at org.knowm.xchange.ExchangeFactory.createExchange(ExchangeFactory.java:110)
    at org.knowm.xchange.ExchangeFactory.createExchange(ExchangeFactory.java:53)
    at App.main(App.java:7)
Caused by: javax.net.ssl.SSLException: Unsupported or unrecognized SSL message
    at java.base/sun.security.ssl.SSLSocketInputRecord.handleUnknownRecord(SSLSocketInputRecord.java:451)
    at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:175)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:111)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1506)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1421)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:455)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:426)
    at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:580)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1665)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
    at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:529)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:308)
    at si.mazi.rescu.HttpTemplate.receive(HttpTemplate.java:145)
    at si.mazi.rescu.RestInvocationHandler.receiveAndMap(RestInvocationHandler.java:156)
    at si.mazi.rescu.RestInvocationHandler.invoke(RestInvocationHandler.java:113)
    at jdk.proxy2/jdk.proxy2.$Proxy14.getMarketInfo(Unknown Source)
    at org.knowm.xchange.gateio.service.GateioMarketDataServiceRaw.getBTERMarketInfo(GateioMarketDataServiceRaw.java:42)
    at org.knowm.xchange.gateio.GateioAdapters.adaptToExchangeMetaData(GateioAdapters.java:236)
    at org.knowm.xchange.gateio.GateioExchange.remoteInit(GateioExchange.java:43)
    at org.knowm.xchange.BaseExchange.applySpecification(BaseExchange.java:113)
    ... 3 more
rizer1980 commented 1 year ago

Hello Alternatively, this is due to the blocking of ip addresses from Russia. Try with proxy.

stapik commented 1 year ago

Hello Alternatively, this is due to the blocking of ip addresses from Russia. Try with proxy.

maybe something is wrong with my PC. Checked, from RU, TK works.

stapik commented 1 year ago

Solved the problem by forwarding through a proxy. Run app with VM options -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=3060