我有一个应该引发SSLPeerUnverifiedException的URL和一个JUnit测试来验证这一点。使用OkHttp3时,确实会收到此异常,但是使用HttpURLConnection时,则会获取SSLHandshakeException。更奇怪的是,我有一个同事使用与我完全相同的HttpURLConnection测试代码,但在另一个Android项目中,他确实得到了正确的SSLPeerUnverifiedException。究竟是什么导致我在使用完全相同的代码但在不同的项目中调用完全相同的URL时,却得到SSLHandshakeException而不是预期的SSLPeerUnverifiedException?
这是我的代码:
@Test
fun `the client should reject`() {
try {
val url = URL("https://tlsnonamematch.some_domain.com/")
val httpCon = url.openConnection() as HttpURLConnection
httpCon.requestMethod = "GET"
val inputStreamReader = InputStreamReader(httpCon.inputStream)
val bufferedReader = BufferedReader(inputStreamReader)
var line: String? = null
while ({ line = bufferedReader.readLine(); line }() != null) {
System.out.println(line)
}
httpCon.disconnect()
Assert.fail("Should throw SSLPeerUnverifiedException")
} catch (e: SSLPeerUnverifiedException) {
// All ok, ignore
}
}