java - 如何使用 Kotlin 和 Retrofit 在 Android 中绕过 HTTPS SSL 证书验证
问题描述
我正在尝试从 Android 客户端向节点服务器发送 POST 请求。我在创建 okhttpClient 时遇到 java.lang.ExceptionInInitializerError 错误,假设绕过 Android 的 SSL 证书验证过程
这是我的代码:
object RetrofitServiceBuilder {
private val interceptor = run {
val httpLoggingInterceptor = HttpLoggingInterceptor()
httpLoggingInterceptor.apply {
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
}
}
private val trustAllCerts : Array<X509TrustManager> = arrayOf(object : X509TrustManager {
@Throws(CertificateException::class)
override fun getAcceptedIssuers(): Array<X509Certificate>? = null
override fun checkClientTrusted(certs: Array<X509Certificate>, authType: String) {}
override fun checkServerTrusted(certs: Array<X509Certificate>, authType: String) {}
})
private val sslContext = SSLContext.getInstance("TLS").apply {
init(null, trustAllCerts, SecureRandom())
}
private val hostNameVerifier : HostnameVerifier =
HostnameVerifier { hostname, session -> true; }
private val client = OkHttpClient.Builder()
.addInterceptor(interceptor)
//This is the part where i get the error
.sslSocketFactory(sslContext.socketFactory, trustAllCerts[0])
.hostnameVerifier(hostNameVerifier)
.build()
private val retrofit = Retrofit.Builder()
.baseUrl("https://xx.xxx.xxx.x:xxxx/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
fun<T> buildService(service: Class<T>): T {
return retrofit.create(service)
}
}
任何人都知道如何正确编写此证书验证绕过代码?
解决方案
推荐阅读
- flutter - 单击 DropdownButtonFormField 时抛出错误
- python - 如何在 protobuf 中定义一个数组?
- r - 使用 ggiraph 悬停在 RShiny 图上时显示 x 值
- python - folium MarkerCluster中的弹出信息
- apache - 如何使用 puppet 在 apache httpd 中的虚拟主机之外添加我自己的自定义配置
- oracle - 在 2 个表中插入数据 MyBatis 错误 命令未正确结束
- midi - 如何将 midi 文件转换为第二部分?
- java - 使用导航组件从片段打开相机 - Android
- node.js - 适用于 nodejs 的 Aws SDK 不加载凭据
- regression - Stata:xtabond 到 xtabond2 的转换