|
41 | 41 | (.flush baos)
|
42 | 42 | (.toByteArray baos)))))
|
43 | 43 |
|
44 |
| -(def ^:private insecure-mode |
45 |
| - (delay (throw (ex-info "insecure? option not supported in this environment" |
46 |
| - {})))) |
| 44 | +(defn- trust-all-ssl! |
| 45 | + [_conn] |
| 46 | + (throw (ex-info "insecure? option not supported in this environment" |
| 47 | + {}))) |
47 | 48 |
|
48 | 49 | (defmacro ^:private def-insecure []
|
49 | 50 | (when (try (import '[javax.net.ssl
|
50 | 51 | HttpsURLConnection SSLContext TrustManager X509TrustManager HostnameVerifier SSLSession])
|
51 | 52 | (catch Exception _))
|
52 | 53 | '(do
|
53 |
| - (defn- my-host-verifier [] |
54 |
| - (proxy [HostnameVerifier] [] |
55 |
| - (verify [^String hostname ^javax.net.ssl.SSLSession session] true))) |
56 |
| - |
57 |
| - (defn trust-invalid-manager |
58 |
| - "This allows the ssl socket to connect with invalid/self-signed SSL certs." |
59 |
| - [] |
60 |
| - (reify javax.net.ssl.X509TrustManager |
61 |
| - (getAcceptedIssuers [this] nil) |
62 |
| - (checkClientTrusted [this certs authType]) |
63 |
| - (checkServerTrusted [this certs authType]))) |
| 54 | + (def ^:private trust-all-hostname-verifier |
| 55 | + (delay |
| 56 | + (proxy [HostnameVerifier] [] |
| 57 | + (verify [^String hostname ^SSLSession session] true)))) |
64 | 58 |
|
65 |
| - (def ^:private insecure-mode |
| 59 | + (def ^:private trust-all-ssl-socket-factory |
66 | 60 | (delay
|
67 |
| - (HttpsURLConnection/setDefaultSSLSocketFactory |
68 |
| - (.getSocketFactory |
69 |
| - (doto (SSLContext/getInstance "SSL") |
70 |
| - (.init nil (into-array TrustManager [(trust-invalid-manager)]) |
71 |
| - (new java.security.SecureRandom))))) |
72 |
| - (HttpsURLConnection/setDefaultHostnameVerifier (my-host-verifier))))))) |
| 61 | + (.getSocketFactory |
| 62 | + (doto (SSLContext/getInstance "SSL") |
| 63 | + (.init nil (into-array TrustManager [(reify X509TrustManager |
| 64 | + (getAcceptedIssuers [this] nil) |
| 65 | + (checkClientTrusted [this certs authType]) |
| 66 | + (checkServerTrusted [this certs authType]))]) |
| 67 | + (new java.security.SecureRandom)))))) |
| 68 | + |
| 69 | + (defn- trust-all-ssl! |
| 70 | + [conn] |
| 71 | + (when (instance? HttpsURLConnection conn) |
| 72 | + (let [^HttpsURLConnection ssl-conn conn] |
| 73 | + (.setHostnameVerifier ssl-conn @trust-all-hostname-verifier) |
| 74 | + (.setSSLSocketFactory ssl-conn @trust-all-ssl-socket-factory))))))) |
73 | 75 |
|
74 | 76 | (def-insecure)
|
75 | 77 |
|
|
84 | 86 | (when server-port (str ":" server-port))
|
85 | 87 | uri
|
86 | 88 | (when query-string (str "?" query-string)))
|
87 |
| - _ (when insecure? |
88 |
| - @insecure-mode) |
89 | 89 | ^HttpURLConnection conn (.openConnection (URL. http-url))]
|
| 90 | + (when insecure? |
| 91 | + (trust-all-ssl! conn)) |
90 | 92 | (when (and content-type character-encoding)
|
91 | 93 | (.setRequestProperty conn "Content-Type" (str content-type
|
92 | 94 | "; charset="
|
|
116 | 118 | (coerce-body-entity req conn))}
|
117 | 119 | (when save-request?
|
118 | 120 | {:request (assoc (dissoc req :save-request?)
|
119 |
| - :http-url http-url)})))) |
| 121 | + :http-url http-url)})))) |
0 commit comments