@@ -17,24 +17,25 @@ package okhttp3.internal.platform
17
17
18
18
import java.security.KeyStore
19
19
import java.security.Provider
20
+ import java.security.cert.X509Certificate
20
21
import javax.net.ssl.SSLContext
22
+ import javax.net.ssl.SSLSession
21
23
import javax.net.ssl.SSLSocket
22
24
import javax.net.ssl.SSLSocketFactory
23
25
import javax.net.ssl.TrustManager
24
26
import javax.net.ssl.TrustManagerFactory
25
27
import javax.net.ssl.X509TrustManager
26
28
import okhttp3.Protocol
27
29
import org.conscrypt.Conscrypt
30
+ import org.conscrypt.ConscryptHostnameVerifier
28
31
29
32
/* *
30
33
* Platform using Conscrypt (conscrypt.org) if installed as the first Security Provider.
31
34
*
32
35
* Requires org.conscrypt:conscrypt-openjdk-uber >= 2.1.0 on the classpath.
33
36
*/
34
37
class ConscryptPlatform private constructor() : Platform() {
35
- // n.b. We should consider defaulting to OpenJDK 11 trust manager
36
- // https://groups.google.com/forum/#!topic/conscrypt/3vYzbesjOb4
37
- private val provider: Provider = Conscrypt .newProviderBuilder().provideTrustManager(true ).build()
38
+ private val provider: Provider = Conscrypt .newProvider()
38
39
39
40
// See release notes https://groups.google.com/forum/#!forum/conscrypt
40
41
// for version differences
@@ -50,10 +51,28 @@ class ConscryptPlatform private constructor() : Platform() {
50
51
" Unexpected default trust managers: ${trustManagers.contentToString()} "
51
52
}
52
53
val x509TrustManager = trustManagers[0 ] as X509TrustManager
53
- Conscrypt .setHostnameVerifier(x509TrustManager) { _, _ -> true }
54
+ // Disabled because OkHttp will run anyway
55
+ Conscrypt .setHostnameVerifier(x509TrustManager, DisabledHostnameVerifier )
54
56
return x509TrustManager
55
57
}
56
58
59
+ internal object DisabledHostnameVerifier : ConscryptHostnameVerifier {
60
+ fun verify (
61
+ hostname : String? ,
62
+ session : SSLSession ?
63
+ ): Boolean {
64
+ return true
65
+ }
66
+
67
+ override fun verify (
68
+ certs : Array <out X509Certificate >? ,
69
+ hostname : String? ,
70
+ session : SSLSession ?
71
+ ): Boolean {
72
+ return true
73
+ }
74
+ }
75
+
57
76
override fun trustManager (sslSocketFactory : SSLSocketFactory ): X509TrustManager ? = null
58
77
59
78
override fun configureTlsExtensions (
@@ -83,9 +102,7 @@ class ConscryptPlatform private constructor() : Platform() {
83
102
override fun newSslSocketFactory (trustManager : X509TrustManager ): SSLSocketFactory {
84
103
return newSSLContext().apply {
85
104
init (null , arrayOf<TrustManager >(trustManager), null )
86
- }.socketFactory.also {
87
- Conscrypt .setUseEngineSocket(it, true )
88
- }
105
+ }.socketFactory
89
106
}
90
107
91
108
companion object {
@@ -94,6 +111,7 @@ class ConscryptPlatform private constructor() : Platform() {
94
111
Class .forName(" org.conscrypt.Conscrypt\$ Version" , false , javaClass.classLoader)
95
112
96
113
when {
114
+ // Bump this version if we ever have a binary incompatibility
97
115
Conscrypt .isAvailable() && atLeastVersion(2 , 1 , 0 ) -> true
98
116
else -> false
99
117
}
0 commit comments