Skip to content

Commit d0380da

Browse files
committed
Use HttpsURLConnection again
1 parent 082e511 commit d0380da

File tree

1 file changed

+27
-35
lines changed

1 file changed

+27
-35
lines changed

lib/src/test/java/at/bitfire/cert4android/CustomCertManagerTest.kt

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,16 @@
1010

1111
package at.bitfire.cert4android
1212

13+
import android.net.SSLCertificateSocketFactory
14+
import org.apache.http.conn.ssl.AllowAllHostnameVerifier
1315
import org.junit.Assume.assumeNotNull
1416
import org.junit.Before
1517
import org.junit.Test
1618
import java.io.IOException
17-
import java.net.InetSocketAddress
18-
import java.net.Socket
1919
import java.net.URL
20-
import java.security.SecureRandom
2120
import java.security.cert.CertificateException
2221
import java.security.cert.X509Certificate
23-
import javax.net.ssl.SSLContext
24-
import javax.net.ssl.SSLSocket
25-
import javax.net.ssl.TrustManager
22+
import javax.net.ssl.HttpsURLConnection
2623
import javax.net.ssl.X509TrustManager
2724

2825
class CustomCertManagerTest {
@@ -99,35 +96,30 @@ class CustomCertManagerTest {
9996
* @return the certificates of the site
10097
*/
10198
fun getSiteCertificates(url: URL): List<X509Certificate> {
102-
val port = if (url.port != -1) url.port else 443
103-
val host = url.host
104-
105-
// Create a TrustManager which accepts all certificates
106-
val trustAll = object : X509TrustManager {
107-
override fun checkClientTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
108-
override fun checkServerTrusted(chain: Array<out X509Certificate>?, authType: String?) {}
109-
override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray()
110-
}
111-
112-
// Create an SSLContext using the trust-all manager
113-
val sslContext = SSLContext.getInstance("TLS").apply {
114-
init(null, arrayOf<TrustManager>(trustAll), SecureRandom())
115-
}
116-
117-
// Create an SSL socket and force a TLS handshake
118-
val socket = Socket().apply {
119-
soTimeout = 5000 // read timeout
120-
connect(
121-
InetSocketAddress(host, port),
122-
5000 // connect timeout
123-
)
124-
}
125-
sslContext.socketFactory.createSocket(socket, host, port, true).use { socket ->
126-
val sslSocket = socket as SSLSocket
127-
// Explicitly start the handshake (gets certificate)
128-
sslSocket.startHandshake()
129-
// server certificates now available in SSLSession
130-
return sslSocket.session.peerCertificates.map { it as X509Certificate }
99+
val conn = url.openConnection() as HttpsURLConnection
100+
try {
101+
conn.hostnameVerifier = AllowAllHostnameVerifier()
102+
conn.sslSocketFactory = object : SSLCertificateSocketFactory(1000) {
103+
init {
104+
setTrustManagers(arrayOf(object : X509TrustManager {
105+
override fun checkClientTrusted(
106+
chain: Array<out X509Certificate?>?,
107+
authType: String?
108+
) { /* OK */ }
109+
override fun checkServerTrusted(
110+
chain: Array<out X509Certificate?>?,
111+
authType: String?
112+
) { /* OK */ }
113+
override fun getAcceptedIssuers(): Array<out X509Certificate?>? = emptyArray()
114+
}))
115+
}
116+
}
117+
conn.inputStream.read()
118+
val certs = mutableListOf<X509Certificate>()
119+
conn.serverCertificates.forEach { certs += it as X509Certificate }
120+
return certs
121+
} finally {
122+
conn.disconnect()
131123
}
132124
}
133125

0 commit comments

Comments
 (0)