그래서 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);
누구든지 이와 같은 문제가 있습니까?
죄송합니다. 문제를 찾은 것 같습니다.
내 API는 cipher를 사용하기 때문에 AES_256_GCM
SSL 핸드 셰이크가 항상 실패했다고 생각합니다. 그래서 대신 cipher를 사용 AES_256_GCM
하여 AES_128_GCM
.
그리고 이것은 내 구성 https://gist.github.com/nmfzone/d175d66752a0c1e1f460fd559b62546f
입니다.
그러면 내 코드가 제대로 작동합니다. 실제로 SSLSocketFactory
Android <21에서 사용자 지정 없이도 작동해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다