Android SSL库中出现故障,通常是协议错误
我知道stackoverflow中有很多关于ssl证书的类似问题。我看了所有这些问题,但我并没有解决这个问题。我正在尝试使用ssl证书连接https。我正在关注android文档 . 这是我的代码:Android SSL库中出现故障,通常是协议错误,android,ssl,Android,Ssl,我知道stackoverflow中有很多关于ssl证书的类似问题。我看了所有这些问题,但我并没有解决这个问题。我正在尝试使用ssl证书连接https。我正在关注android文档 . 这是我的代码: ProviderInstaller.installIfNeeded(this) val cf = CertificateFactory.getInstance("X.509") val caInput = resources.openRawResou
ProviderInstaller.installIfNeeded(this)
val cf = CertificateFactory.getInstance("X.509")
val caInput = resources.openRawResource(R.raw.cert)
val ca: Certificate
try {
ca = cf.generateCertificate(caInput)
} finally {
caInput.close()
}
val keyStoreType = KeyStore.getDefaultType()
val keyStore = KeyStore.getInstance(keyStoreType)
keyStore.load(null, null)
keyStore.setCertificateEntry("ca", ca)
val tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm()
val tmf = TrustManagerFactory.getInstance(tmfAlgorithm)
tmf.init(keyStore)
val kmf = KeyManagerFactory.getInstance("X509")
kmf.init(keyStore, pass.toCharArray())
val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
override fun getAcceptedIssuers(): Array<X509Certificate> {
return arrayOf<X509Certificate>();
}
override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) {
}
override fun checkServerTrusted(p0: Array<out X509Certificate>?, p1: String?) {
}
})
val context = SSLContext.getInstance("TLSv1")
context.init(kmf.keyManagers, trustAllCerts, java.security.SecureRandom())
val socketFactory = context.socketFactory
HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory)
doAsync {
val url = URL(sourceUrl)
val urlConnection = url.openConnection() as HttpsURLConnection
val `in` = urlConnection.inputStream
}
ssl=0x5266a740:ssl库中出现故障,通常是协议错误
W:错误:14077102:SSL例程:SSL23_GET_SERVER_HELLO:不支持的协议(外部/openssl/SSL/s23_clnt.c:714 0x52587f10:0x00000000)
W:com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:448)
W:com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
W:com.android.okhttp.Connection.connect(Connection.java:107)
W:com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
W:com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
W:com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
W:com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
W:com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
W:com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
W:com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
W:com.triomobil.triotys.pinning.PinningActivity$onCreate$1.invoke(PinningActivity.kt:142)
W:com.triomobil.triotys.pinning.PinningActivity$onCreate$1.invoke(PinningActivity.kt:33)
W:org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Async.kt:140)
W:org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Async.kt)
W:org.jetbrains.anko.AsyncKt$sam$Callable$761a5578.call(Async.kt)
W:at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W:at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
W:at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
W:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W:at java.lang.Thread.run(Thread.java:841)
W:由以下原因引起:javax.net.ssl.SSLProtocolException:ssl握手中止:ssl=0x5266a740:ssl库中出现故障,通常是协议
错误
W:错误:14077102:SSL例程:SSL23_GET_SERVER_HELLO:不支持的协议(外部/openssl/SSL/s23_clnt.c:714 0x52587f10:0x00000000)
W:com.android.org.conscrypt.NativeCrypto.SSL\u do\u握手(本机方法)
W:com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:406)
W:。。。20多
我在寻找所有类似的问题。我什么都试过了,但没用 “…不支持的协议…”-这意味着服务器不支持您正在使用的SSL/TLS协议(“TLSv1”)。这与证书无关。请检查您的服务器支持哪些协议,并确保它们符合您的期望。我的服务器支持TLSv1.1。数据包捕获(tcpdump,wireshark…-上载到cloudshark.org)可能有助于进一步调试问题。通过数据包捕获,人们可以看到握手的细节,并可能找到握手失败的原因。我在API 16模拟器上遇到了这个问题。另见。
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: