Skip to content

Commit 3f0ff64

Browse files
committed
Delay creating insecure trust manager
FIPS 140-2 isn't keen on alternative trust managers. This delays the creation of an insecure trust manager until someone tries to use it.
1 parent b3c5e24 commit 3f0ff64

File tree

1 file changed

+40
-36
lines changed

1 file changed

+40
-36
lines changed

src/clj_http/conn_mgr.clj

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,28 @@
2525
(org.apache.http.nio.conn NoopIOSessionStrategy)))
2626

2727
(def ^:private insecure-context-verifier
28-
{
29-
:context (-> (SSLContexts/custom)
30-
(.loadTrustMaterial nil (reify TrustStrategy
31-
(isTrusted [_ _ _] true)))
32-
(.build))
33-
:verifier NoopHostnameVerifier/INSTANCE})
34-
35-
(def ^SSLConnectionSocketFactory insecure-socket-factory
36-
(let [{:keys [context verifier]} insecure-context-verifier]
37-
(SSLConnectionSocketFactory. ^SSLContext context
38-
^HostnameVerifier verifier)))
39-
40-
(def ^SSLIOSessionStrategy insecure-strategy
41-
(let [{:keys [context verifier]} insecure-context-verifier]
42-
(SSLIOSessionStrategy. ^SSLContext context ^HostnameVerifier verifier)))
43-
44-
(def ^SSLConnectionSocketFactory secure-ssl-socket-factory
28+
(delay {
29+
:context (-> (SSLContexts/custom)
30+
(.loadTrustMaterial nil (reify TrustStrategy
31+
(isTrusted [_ _ _] true)))
32+
(.build))
33+
:verifier NoopHostnameVerifier/INSTANCE}))
34+
35+
(def ^:private insecure-socket-factory
36+
(delay
37+
(let [{:keys [context verifier]} @insecure-context-verifier]
38+
(SSLConnectionSocketFactory. ^SSLContext context
39+
^HostnameVerifier verifier))))
40+
41+
(def ^:private insecure-strategy
42+
(delay
43+
(let [{:keys [context verifier]} @insecure-context-verifier]
44+
(SSLIOSessionStrategy. ^SSLContext context ^HostnameVerifier verifier))))
45+
46+
(def ^:private ^SSLConnectionSocketFactory secure-ssl-socket-factory
4547
(SSLConnectionSocketFactory/getSocketFactory))
4648

47-
(def ^SSLIOSessionStrategy secure-strategy
49+
(def ^:private ^SSLIOSessionStrategy secure-strategy
4850
(SSLIOSessionStrategy/getDefaultStrategy))
4951

5052
(defn ^SSLConnectionSocketFactory SSLGenericSocketFactory
@@ -119,25 +121,27 @@
119121
(.build))]
120122
(PoolingHttpClientConnectionManager. reg))))
121123

122-
(def insecure-scheme-registry
123-
(-> (RegistryBuilder/create)
124-
(.register "http" PlainConnectionSocketFactory/INSTANCE)
125-
(.register "https" insecure-socket-factory)
126-
(.build)))
127-
128-
(def insecure-strategy-registry
129-
(-> (RegistryBuilder/create)
130-
(.register "http" NoopIOSessionStrategy/INSTANCE)
131-
(.register "https" insecure-strategy)
132-
(.build)))
133-
134-
(def regular-scheme-registry
124+
(def ^:private insecure-scheme-registry
125+
(delay
126+
(-> (RegistryBuilder/create)
127+
(.register "http" PlainConnectionSocketFactory/INSTANCE)
128+
(.register "https" ^SSLConnectionSocketFactory @insecure-socket-factory)
129+
(.build))))
130+
131+
(def ^:private insecure-strategy-registry
132+
(delay
133+
(-> (RegistryBuilder/create)
134+
(.register "http" NoopIOSessionStrategy/INSTANCE)
135+
(.register "https" ^SSLIOSessionStrategy @insecure-strategy)
136+
(.build))))
137+
138+
(def ^:private regular-scheme-registry
135139
(-> (RegistryBuilder/create)
136140
(.register "http" (PlainConnectionSocketFactory/getSocketFactory))
137141
(.register "https" secure-ssl-socket-factory)
138142
(.build)))
139143

140-
(def regular-strategy-registry
144+
(def ^:private regular-strategy-registry
141145
(-> (RegistryBuilder/create)
142146
(.register "http" NoopIOSessionStrategy/INSTANCE)
143147
(.register "https" secure-strategy)
@@ -170,7 +174,7 @@
170174
(BasicHttpClientConnectionManager. (get-keystore-scheme-registry req))
171175

172176
(opt req :insecure) (BasicHttpClientConnectionManager.
173-
insecure-scheme-registry)
177+
@insecure-scheme-registry)
174178

175179
:else (BasicHttpClientConnectionManager. regular-scheme-registry)))
176180

@@ -200,7 +204,7 @@
200204
(get-keystore-strategy-registry req)
201205

202206
(opt req :insecure)
203-
insecure-strategy-registry
207+
@insecure-strategy-registry
204208

205209
:else regular-strategy-registry)
206210
io-reactor (make-ioreactor {:shutdown-grace-period 1})]
@@ -218,7 +222,7 @@
218222
timeout value."
219223
[{:keys [timeout keystore trust-store] :as config}]
220224
(let [registry (cond
221-
(opt config :insecure) insecure-scheme-registry
225+
(opt config :insecure) @insecure-scheme-registry
222226

223227
(or keystore trust-store)
224228
(get-keystore-scheme-registry config)
@@ -271,7 +275,7 @@
271275
(defn- ^PoolingNHttpClientConnectionManager make-reusable-async-conn-manager*
272276
[{:keys [timeout keystore trust-store io-config] :as config}]
273277
(let [registry (cond
274-
(opt config :insecure) insecure-strategy-registry
278+
(opt config :insecure) @insecure-strategy-registry
275279

276280
(or keystore trust-store)
277281
(get-keystore-scheme-registry config)

0 commit comments

Comments
 (0)