我需要抓取已过期/自签名证书的内部公司网站。没有人会为该主机配置有效证书,所以我必须使用不安全的连接。
curl
有--insecure
为此目的的旗帜,
Scala finagle 库有.tlsWithoutValidation()
模式。
问题:是否有具有类似选项的 Kotlin 库?
UPD:到目前为止,我正在使用Fuel和这里找到的 javish 解决方法,但仍在寻找更好的方法..
fun useInsecureSSL() {
// Create a trust manager that does not validate certificate chains
val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
override fun getAcceptedIssuers(): Array<X509Certificate>? = null
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) = Unit
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) = Unit
})
val sc = SSLContext.getInstance("SSL")
sc.init(null, trustAllCerts, java.security.SecureRandom())
HttpsURLConnection.setDefaultSSLSocketFactory(sc.socketFactory)
// Create all-trusting host name verifier
val allHostsValid = HostnameVerifier { _, _ -> true }
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid)
}
上述解决方法有效,但是它过于冗长,并且似乎为我的应用程序建立的每个连接设置了不安全模式,而不仅仅是特定的连接。