Kotlin 中的 OKhttp 自签名证书 Android
OKhttp Self sign certificate in Kotlin Android
我正在为一个使用自签名 SSL 证书的 Android Kotlin 项目工作。
我使用 Okhttp 连接服务器,但是当我尝试访问服务器 IP 时我的应用程序崩溃了,错误提示我需要自签名证书才能访问。
我已经通过搜索互联网资源做了很多测试,但没有一个适用于我的代码。检查我的以下代码并建议我进行更好的修复。
请注意 URL 我放在这里只是为了示例。
val client = OkHttpClient()
var url = "https://00.00.00.000"
val requestBody = FormBody.Builder()
.add("phone", "+9500000000")
.add("token", "03AGdBq26rMv")
.build()
val request = Request.Builder().url(url)
.header("User-Agent", "OkHttp Headers.java")
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.post(requestBody)
.build()
val response = client.newCall(request).execute()
return response.body?.string().toString()
println("Response" + response.body?.string().toString())
此示例让您使用自签名证书连接到已知的开发服务器。
val clientCertificates = HandshakeCertificates.Builder()
.addPlatformTrustedCertificates()
.addInsecureHost(server.hostName)
.build()
val client = OkHttpClient.Builder()
.sslSocketFactory(clientCertificates.sslSocketFactory(), clientCertificates.trustManager)
.build()
当我在建立客户端连接之前放置这几行代码时,以下代码对我有用。
//set self sign certificate
val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {
}
override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {
}
override fun getAcceptedIssuers() = arrayOf<X509Certificate>()
})
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustAllCerts, java.security.SecureRandom())
// Create an ssl socket factory with our all-trusting manager
val sslSocketFactory = sslContext.socketFactory
// connect to server
val client = OkHttpClient.Builder().sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager).hostnameVerifier{ _, _ -> true }.build()
我正在为一个使用自签名 SSL 证书的 Android Kotlin 项目工作。
我使用 Okhttp 连接服务器,但是当我尝试访问服务器 IP 时我的应用程序崩溃了,错误提示我需要自签名证书才能访问。
我已经通过搜索互联网资源做了很多测试,但没有一个适用于我的代码。检查我的以下代码并建议我进行更好的修复。
请注意 URL 我放在这里只是为了示例。
val client = OkHttpClient()
var url = "https://00.00.00.000"
val requestBody = FormBody.Builder()
.add("phone", "+9500000000")
.add("token", "03AGdBq26rMv")
.build()
val request = Request.Builder().url(url)
.header("User-Agent", "OkHttp Headers.java")
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.post(requestBody)
.build()
val response = client.newCall(request).execute()
return response.body?.string().toString()
println("Response" + response.body?.string().toString())
此示例让您使用自签名证书连接到已知的开发服务器。
val clientCertificates = HandshakeCertificates.Builder()
.addPlatformTrustedCertificates()
.addInsecureHost(server.hostName)
.build()
val client = OkHttpClient.Builder()
.sslSocketFactory(clientCertificates.sslSocketFactory(), clientCertificates.trustManager)
.build()
当我在建立客户端连接之前放置这几行代码时,以下代码对我有用。
//set self sign certificate
val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {
}
override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {
}
override fun getAcceptedIssuers() = arrayOf<X509Certificate>()
})
val sslContext = SSLContext.getInstance("SSL")
sslContext.init(null, trustAllCerts, java.security.SecureRandom())
// Create an ssl socket factory with our all-trusting manager
val sslSocketFactory = sslContext.socketFactory
// connect to server
val client = OkHttpClient.Builder().sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager).hostnameVerifier{ _, _ -> true }.build()