Android <21에서 Retrofit 2를 사용하여 HTTPS에 연결하지 못했습니다.

nmfzone

그래서 https://api.*****.id내 Android를 통해 TLS v1.2 (Let 's Encrypt)를 사용하는 API를 연결하려고했습니다 .

Android> 20을 사용하는 경우 모든 것이 정상적으로 작동하지만 Android <21을 사용하는 경우 Android 모니터에 다음과 같이 표시됩니다.

W/dalvikvm: VFY: unable to find class referenced in signature (Ljava/nio/file/Path;)
W/dalvikvm: VFY: unable to find class referenced in signature ([Ljava/nio/file/OpenOption;)
I/dalvikvm: Could not find method java.nio.file.Files.newOutputStream, referenced from method okio.Okio.sink
W/dalvikvm: VFY: unable to resolve static method 23633: Ljava/nio/file/Files;.newOutputStream (Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;
D/dalvikvm: VFY: replacing opcode 0x71 at 0x000a
W/dalvikvm: VFY: unable to find class referenced in signature (Ljava/nio/file/Path;)
W/dalvikvm: VFY: unable to find class referenced in signature ([Ljava/nio/file/OpenOption;)
I/dalvikvm: Could not find method java.nio.file.Files.newInputStream, referenced from method okio.Okio.source
W/dalvikvm: VFY: unable to resolve static method 23632: Ljava/nio/file/Files;.newInputStream (Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;
D/dalvikvm: VFY: replacing opcode 0x71 at 0x000a
D/Error: java.net.ConnectException: Failed to connect to api.*****.id/64:ff9b::8b3b:eb77:443

여기에서 TLSSocketFactory를 구현했습니다. https://gist.github.com/fkrauthan/ac8624466a4dee4fd02f

그런 다음 다음과 같이 사용했습니다.

httpClient = new OkHttpClient.Builder();

ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
                .tlsVersions(TlsVersion.TLS_1_2, TlsVersion.TLS_1_1)
                .build();

if (Build.VERSION.SDK_INT < 21) {
     X509TrustManager trustManager = TLSPatch.systemDefaultTrustManager();
     httpClient.sslSocketFactory(new TLSPatch.TLSSocketFactory(), trustManager);
}

httpClient.connectionSpecs(Collections.singletonList(spec))
     .readTimeout(60, TimeUnit.SECONDS);

누구든지 이와 같은 문제가 있습니까?

nmfzone

죄송합니다. 문제를 찾은 것 같습니다.

내 API는 cipher를 사용하기 때문에 AES_256_GCMSSL 핸드 셰이크가 항상 실패했다고 생각합니다. 그래서 대신 cipher를 사용 AES_256_GCM하여 AES_128_GCM.

그리고 이것은 내 구성 https://gist.github.com/nmfzone/d175d66752a0c1e1f460fd559b62546f입니다.

그러면 내 코드가 제대로 작동합니다. 실제로 SSLSocketFactoryAndroid <21에서 사용자 지정 없이도 작동해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Retrofit을 사용하여 REST 웹 서비스를 사용하기위한 간단한 Android 클라이언트- '서버에 연결하지 못했습니다'오류가 발생하는 이유

분류에서Dev

PXE를 통해 서버에 연결하지 못했습니다.

분류에서Dev

USB를 사용하여 PC에 연결된 휴대폰을 감지하지 못했습니다.

분류에서Dev

Spring 4.0 webstocket stomp api를 사용하여 Rabbitmq에 연결하지 못했습니다.

분류에서Dev

Android-Google Play 서비스에 연결하지 못했습니다.

분류에서Dev

WAMPSERVER 2.5에서 HTTPS를 설정하지 못했습니다.

분류에서Dev

psycopg2를 사용하여 Postgres 컨테이너에 연결하지 못했습니까?

분류에서Dev

오류 : FTP를 사용하여 EC2 서버에 연결할 때 "디렉터리 목록을 검색하지 못했습니다"

분류에서Dev

getter를 사용하여 Java에서 값을 전달하지 못했습니다.

분류에서Dev

연결 목록에 노드를 추가하지 못했습니다.

분류에서Dev

오류 : ssh를 통해 호스트에 연결하지 못했습니다.

분류에서Dev

Ansible-ssh를 통해 호스트에 연결하지 못했습니다.

분류에서Dev

VPN 서비스를 시작하지 못했기 때문에 VPN 서비스 연결에 실패했습니다.

분류에서Dev

Appium Studio에서 iPhone XR에 연결하지 못했습니다.

분류에서Dev

octopress를 사용하여 Github 페이지에 배포하지 못했습니다.

분류에서Dev

ggplot2에서 boxplot을 사용하지 못했습니다.

분류에서Dev

Angular에서 jquery를 사용하지 못했습니다.

분류에서Dev

juju Bootstrap --debug가 https://streams.canonical.com에 연결하지 못했습니다.

분류에서Dev

Maven을 사용하여 jar를 github에 업로드하지 못했습니다.

분류에서Dev

Android에서 gridview를 사용하여 getChildView를 여러 번 호출했습니다.

분류에서Dev

원격 mysql 서버에 연결하지 못했습니다.

분류에서Dev

Android Studio에서 retrofit2를 사용하여 json 로그를 얻는 방법은 무엇입니까?

분류에서Dev

gnuplot을 사용하여 하나의 플롯에 세 개의 그래프를 결합하지 못했습니다.

분류에서Dev

Docker 내에서 elasticsearch 사용 : 새 연결을 설정하지 못했습니다.

분류에서Dev

Python을 사용하여 SQL Server에 연결할 때 ''사용자가 로그인하지 못했습니다.

분류에서Dev

지도를로드하지 못했습니다. Android Google Maps API v2와 관련된 Google 서버 문제에 연결하는 중 오류가 발생했습니다.

분류에서Dev

Android Studio에서 Gradle 프로젝트를 동기화하지 못했습니다.

분류에서Dev

Mongo가 처음 연결할 때 서버에 연결하지 못했습니다.

분류에서Dev

CLI에서 composer를 사용하여 참여자 인스턴스에 ID를 발행하지 못했습니다.

Related 관련 기사

  1. 1

    Retrofit을 사용하여 REST 웹 서비스를 사용하기위한 간단한 Android 클라이언트- '서버에 연결하지 못했습니다'오류가 발생하는 이유

  2. 2

    PXE를 통해 서버에 연결하지 못했습니다.

  3. 3

    USB를 사용하여 PC에 연결된 휴대폰을 감지하지 못했습니다.

  4. 4

    Spring 4.0 webstocket stomp api를 사용하여 Rabbitmq에 연결하지 못했습니다.

  5. 5

    Android-Google Play 서비스에 연결하지 못했습니다.

  6. 6

    WAMPSERVER 2.5에서 HTTPS를 설정하지 못했습니다.

  7. 7

    psycopg2를 사용하여 Postgres 컨테이너에 연결하지 못했습니까?

  8. 8

    오류 : FTP를 사용하여 EC2 서버에 연결할 때 "디렉터리 목록을 검색하지 못했습니다"

  9. 9

    getter를 사용하여 Java에서 값을 전달하지 못했습니다.

  10. 10

    연결 목록에 노드를 추가하지 못했습니다.

  11. 11

    오류 : ssh를 통해 호스트에 연결하지 못했습니다.

  12. 12

    Ansible-ssh를 통해 호스트에 연결하지 못했습니다.

  13. 13

    VPN 서비스를 시작하지 못했기 때문에 VPN 서비스 연결에 실패했습니다.

  14. 14

    Appium Studio에서 iPhone XR에 연결하지 못했습니다.

  15. 15

    octopress를 사용하여 Github 페이지에 배포하지 못했습니다.

  16. 16

    ggplot2에서 boxplot을 사용하지 못했습니다.

  17. 17

    Angular에서 jquery를 사용하지 못했습니다.

  18. 18

    juju Bootstrap --debug가 https://streams.canonical.com에 연결하지 못했습니다.

  19. 19

    Maven을 사용하여 jar를 github에 업로드하지 못했습니다.

  20. 20

    Android에서 gridview를 사용하여 getChildView를 여러 번 호출했습니다.

  21. 21

    원격 mysql 서버에 연결하지 못했습니다.

  22. 22

    Android Studio에서 retrofit2를 사용하여 json 로그를 얻는 방법은 무엇입니까?

  23. 23

    gnuplot을 사용하여 하나의 플롯에 세 개의 그래프를 결합하지 못했습니다.

  24. 24

    Docker 내에서 elasticsearch 사용 : 새 연결을 설정하지 못했습니다.

  25. 25

    Python을 사용하여 SQL Server에 연결할 때 ''사용자가 로그인하지 못했습니다.

  26. 26

    지도를로드하지 못했습니다. Android Google Maps API v2와 관련된 Google 서버 문제에 연결하는 중 오류가 발생했습니다.

  27. 27

    Android Studio에서 Gradle 프로젝트를 동기화하지 못했습니다.

  28. 28

    Mongo가 처음 연결할 때 서버에 연결하지 못했습니다.

  29. 29

    CLI에서 composer를 사용하여 참여자 인스턴스에 ID를 발행하지 못했습니다.

뜨겁다태그

보관