2017-04-15 2 views
0

したがって、私はAndroid経由でTLS v1.2(暗号化しようとする)を使用するAPI https://api.ramein.idに接続しようとしました。 Androidの> 20を使用した場合、しかし、Androidの< 21アンドロイドモニターを使用した場合AndroidでRetrofit 2を使用してHTTPSに接続できませんでした<21

すべてが言う通常通りに動作します:

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.ramein.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); 

誰かがこのような問題を抱えていますか?

答えて

0

おっと、私は問題が見つかりました。

私のAPIは暗号AES_256_GCMを使用しているため、SSLハンドシェイクは常に失敗したと思います。したがって、代わりにAES_256_GCMという暗号を使用し、AES_128_GCMに変更しました。

これは私の設定です https://gist.github.com/nmfzone/d175d66752a0c1e1f460fd559b62546fです。

次に、私のコードが正しく動作します。実際には、カスタムなしでSSLSocketFactoryのAndroid < 21も動作するはずです。

関連する問題