Skip to content

Commit 5499875

Browse files
lukebakkenmergify[bot]
authored andcommitted
Fix up oauth2_client ssl options
This uses the same technique as PR #12557 and #12564 to ensure that when neither `cacerts` nor `cacertfile` are set, the system certs are used. (cherry picked from commit c481f39)
1 parent 1ea9bf7 commit 5499875

File tree

2 files changed

+89
-13
lines changed

2 files changed

+89
-13
lines changed

deps/oauth2_client/src/oauth2_client.erl

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -403,15 +403,23 @@ lookup_root_oauth_provider() ->
403403
extract_ssl_options_as_list(Map) ->
404404
{Verify, CaCerts, CaCertFile} = case get_verify_or_peer_verification(Map, verify_peer) of
405405
verify_peer ->
406-
case maps:get(cacertfile, Map, undefined) of
407-
undefined ->
408-
case public_key:cacerts_get() of
409-
[] -> {verify_none, undefined, undefined};
410-
Certs -> {verify_peer, Certs, undefined}
406+
case {maps:get(cacerts, Map, undefined), maps:get(cacertfile, Map, undefined)} of
407+
{undefined, undefined} ->
408+
try public_key:cacerts_get() of
409+
[] ->
410+
{verify_none, undefined, undefined};
411+
Certs ->
412+
{verify_peer, Certs, undefined}
413+
catch _ ->
414+
{verify_none, undefined, undefined}
411415
end;
412-
CaCert -> {verify_peer, undefined, CaCert}
416+
{CaCerts0, undefined} ->
417+
{verify_peer, CaCerts0, undefined};
418+
{undefined, CaCertFile0} ->
419+
{verify_peer, undefined, CaCertFile0}
413420
end;
414-
verify_none -> {verify_none, undefined, undefined}
421+
verify_none ->
422+
{verify_none, undefined, undefined}
415423
end,
416424
[ {verify, Verify} ]
417425
++

deps/oauth2_client/test/unit_SUITE.erl

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@ groups() ->
3434
choose_verify_over_peer_verification,
3535
verify_set_to_verify_none,
3636
peer_verification_set_to_verify_none,
37+
peer_verification_set_to_verify_peer_with_cacerts,
3738
peer_verification_set_to_verify_peer_with_cacertfile,
38-
verify_set_to_verify_peer_with_cacertfile
39+
peer_verification_set_to_verify_peer_without_cacerts_or_cacertfile,
40+
verify_set_to_verify_peer_with_cacerts,
41+
verify_set_to_verify_peer_with_cacertfile,
42+
verify_set_to_verify_peer_without_cacerts_or_cacertfile
3943
]},
4044
{get_expiration_time, [], [
4145
access_token_response_without_expiration_time,
@@ -230,34 +234,98 @@ peer_verification_set_to_verify_none(_) ->
230234
cacertfile => "/tmp"
231235
})).
232236

237+
peer_verification_set_to_verify_peer_without_cacerts_or_cacertfile(_) ->
238+
CaCerts = try public_key:cacerts_get() of
239+
CaCerts0 when is_list(CaCerts0) ->
240+
CaCerts0;
241+
_ -> []
242+
catch _ ->
243+
[]
244+
end,
245+
Expected = [
246+
{verify, verify_peer},
247+
{depth, 10},
248+
{crl_check, false},
249+
{fail_if_no_peer_cert, false},
250+
{cacerts, CaCerts}
251+
],
252+
?assertEqual(Expected, oauth2_client:extract_ssl_options_as_list(#{
253+
peer_verification => verify_peer
254+
})).
255+
256+
verify_set_to_verify_peer_without_cacerts_or_cacertfile(_) ->
257+
CaCerts = try public_key:cacerts_get() of
258+
CaCerts0 when is_list(CaCerts0) ->
259+
CaCerts0;
260+
_ -> []
261+
catch _ ->
262+
[]
263+
end,
264+
Expected = [
265+
{verify, verify_peer},
266+
{depth, 10},
267+
{crl_check, false},
268+
{fail_if_no_peer_cert, false},
269+
{cacerts, CaCerts}
270+
],
271+
?assertEqual(Expected, oauth2_client:extract_ssl_options_as_list(#{
272+
verify => verify_peer
273+
})).
233274

234275
peer_verification_set_to_verify_peer_with_cacertfile(_) ->
235276
Expected = [
236277
{verify, verify_peer},
237278
{depth, 10},
238-
{crl_check,false},
239-
{fail_if_no_peer_cert,false},
279+
{crl_check, false},
280+
{fail_if_no_peer_cert, false},
240281
{cacertfile, "/tmp"}
241282
],
242283
?assertEqual(Expected, oauth2_client:extract_ssl_options_as_list(#{
243284
cacertfile => "/tmp",
244285
peer_verification => verify_peer
245286
})).
246287

247-
248288
verify_set_to_verify_peer_with_cacertfile(_) ->
249289
Expected = [
250290
{verify, verify_peer},
251291
{depth, 10},
252-
{crl_check,false},
253-
{fail_if_no_peer_cert,false},
292+
{crl_check, false},
293+
{fail_if_no_peer_cert, false},
254294
{cacertfile, "/tmp"}
255295
],
256296
?assertEqual(Expected, oauth2_client:extract_ssl_options_as_list(#{
257297
cacertfile => "/tmp",
258298
verify => verify_peer
259299
})).
260300

301+
peer_verification_set_to_verify_peer_with_cacerts(_) ->
302+
CaCerts = [<<1,2,3,4>>, <<5,6,7,8>>],
303+
Expected = [
304+
{verify, verify_peer},
305+
{depth, 10},
306+
{crl_check, false},
307+
{fail_if_no_peer_cert, false},
308+
{cacerts, CaCerts}
309+
],
310+
?assertEqual(Expected, oauth2_client:extract_ssl_options_as_list(#{
311+
cacerts => CaCerts,
312+
peer_verification => verify_peer
313+
})).
314+
315+
verify_set_to_verify_peer_with_cacerts(_) ->
316+
CaCerts = [<<1,2,3,4>>, <<5,6,7,8>>],
317+
Expected = [
318+
{verify, verify_peer},
319+
{depth, 10},
320+
{crl_check, false},
321+
{fail_if_no_peer_cert, false},
322+
{cacerts, CaCerts}
323+
],
324+
?assertEqual(Expected, oauth2_client:extract_ssl_options_as_list(#{
325+
cacerts => CaCerts,
326+
verify => verify_peer
327+
})).
328+
261329
access_token_response_with_expires_in(_) ->
262330
Jwk = ?UTIL_MOD:fixture_jwk(),
263331
ExpiresIn = os:system_time(seconds),

0 commit comments

Comments
 (0)