javax.net.ssl.SSLHandshakeException
·
最近练手kotlin,使用的是开放的api,一直都比较顺利,直到我某天想用Fiddler抓包看下我的数据,请求结果报错提示我:javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
没有可信任的证书.百度一下说是fiddler配置问题,但是抓包别的app是可以获取到数据,而且我也找不到fiddler配置问题,所以我只能去改代码配置可信任的证书
object HttpUtils {
@SuppressLint("TrulyRandom")
fun createSSLSocketFactory(): SSLSocketFactory? {
var sSLSocketFactory: SSLSocketFactory? = null
try {
val sc = SSLContext.getInstance("TLS")
sc.init(
null, arrayOf<TrustManager>(TrustAllManager()),
SecureRandom()
)
sSLSocketFactory = sc.socketFactory
} catch (ignored: Exception) {
}
return sSLSocketFactory
}
class TrustAllManager : X509TrustManager {
@SuppressLint("TrustAllX509TrustManager")
@Throws(CertificateException::class)
override fun checkClientTrusted(
chain: Array<X509Certificate>,
authType: String
) {
}
@SuppressLint("TrustAllX509TrustManager")
@Throws(CertificateException::class)
override fun checkServerTrusted(
chain: Array<X509Certificate>,
authType: String
) {
}
override fun getAcceptedIssuers(): Array<X509Certificate?> {
return arrayOfNulls(0)
}
}
class TrustAllHostnameVerifier : HostnameVerifier {
@SuppressLint("BadHostnameVerifier")
override fun verify(
hostname: String,
session: SSLSession
): Boolean {
return true
}
}
/*https验证*/
class TrustAllCerts : X509TrustManager {
@SuppressLint("TrustAllX509TrustManager")
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
}
@SuppressLint("TrustAllX509TrustManager")
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
}
override fun getAcceptedIssuers(): Array<X509Certificate?> {
return arrayOfNulls(0)
}
}
}
然后再okhttp创建的时候使用

更多推荐

所有评论(0)