AndroidでAPIをつなげる際にSSLの証明書が許可されてないからつなげないとのことで、以下のソースを書きました。
kotlin
1object HttpClient { 2 internal class MyX509TrustManager : X509TrustManager { 3 override fun checkClientTrusted( 4 chain: Array<X509Certificate?>?, 5 authType: String? 6 ) { 7 } 8 9 override fun checkServerTrusted( 10 chain: Array<X509Certificate?>?, 11 authType: String? 12 ) { 13 } 14 15 override fun getAcceptedIssuers(): Array<X509Certificate> { 16 return acceptedIssuers 17 } 18 } 19 fun IISCertificateOKInstance():OkHttpClient{ 20 21 // OkHttpClient の Bulider を作成する 22 val clientBuilder = OkHttpClient.Builder() 23 24 // proxyを設定する 25 clientBuilder.proxy(Proxy(Proxy.Type.HTTP, InetSocketAddress("127.0.0.1", 8008))) 26 27 // MyX509TrustManager を割り当てる 28 // MyX509TrustManager は全ての証明書を許可するようにしている 29 val sslContext = SSLContext.getInstance("SSL") 30 sslContext.init(null, Array(1,{MyX509TrustManager()}) , java.security.SecureRandom()) 31 clientBuilder.sslSocketFactory(sslContext.getSocketFactory(), MyX509TrustManager()) 32 33 return clientBuilder.build() 34 } 35}
参考URL:https://kagasu.hatenablog.com/entry/2017/03/10/160636
IISCertificateOKInstance()メソッドですべての証明書を許可したOkHttpClientが返されるのでそのままAPI叩いて万事解決と思っていたのですが、以下のエラーが返されました。
java.lang.StackOverflowError: stack size 1038KB
調べたところ、何かが容量オーバーしているというエラーで、sslSocketFactoryのあたりで発生していました。
よって、容量を増やせばいいと思ったのですが、自分の目が節穴のせいなのか
いくら探してもその容量が設定されているような場所が存在しません。
さらに調べたところ、StackOverflowErrorは容量エラーだけでなく、無限ループでも発生するとどこかで書いてありましたので、
先の自分の仮設さえも怪しい次第です。
このエラーの原因、および解決法を教えていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/30 06:44