diff options
Diffstat (limited to 'lib/ssl/test')
| -rw-r--r-- | lib/ssl/test/ssl_certificate_verify_SUITE.erl | 36 | ||||
| -rw-r--r-- | lib/ssl/test/ssl_handshake_SUITE.erl | 26 | 
2 files changed, 60 insertions, 2 deletions
| diff --git a/lib/ssl/test/ssl_certificate_verify_SUITE.erl b/lib/ssl/test/ssl_certificate_verify_SUITE.erl index c0981a9eaf..f677bf8a6e 100644 --- a/lib/ssl/test/ssl_certificate_verify_SUITE.erl +++ b/lib/ssl/test/ssl_certificate_verify_SUITE.erl @@ -88,7 +88,8 @@ tests() ->       critical_extension_verify_client,       critical_extension_verify_server,       critical_extension_verify_none, -     customize_hostname_check +     customize_hostname_check, +     incomplete_chain      ].  error_handling_tests()-> @@ -1198,6 +1199,39 @@ customize_hostname_check(Config) when is_list(Config) ->      ssl_test_lib:close(Server),      ssl_test_lib:close(Client). +incomplete_chain() -> +    [{doc,"Test option verify_peer"}]. +incomplete_chain(Config) when is_list(Config) -> +    DefConf = ssl_test_lib:default_cert_chain_conf(), +    CertChainConf = ssl_test_lib:gen_conf(rsa, rsa, DefConf, DefConf), +    #{server_config := ServerConf, +      client_config := ClientConf} = public_key:pkix_test_data(CertChainConf), +    [ServerRoot| _] = ServerCas = proplists:get_value(cacerts, ServerConf), +    ClientCas = proplists:get_value(cacerts, ClientConf), + +    Active = proplists:get_value(active, Config), +    ReceiveFunction =  proplists:get_value(receive_function, Config), +    {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config), +    Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0}, +					{from, self()}, +                                        {mfa, {ssl_test_lib, ReceiveFunction, []}}, +                                        {options, [{active, Active}, {verify, verify_peer}, +                                                   {cacerts, [ServerRoot]} |   +                                                   proplists:delete(cacerts, ServerConf)]}]), +    Port  = ssl_test_lib:inet_port(Server), +    Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, +					{host, Hostname}, +                                        {from, self()}, +                                        {mfa, {ssl_test_lib, ReceiveFunction, []}}, +                                        {options, [{active, Active},  +                                                   {verify, verify_peer}, +                                                   {cacerts,  ServerCas ++ ClientCas} |  +                                                   proplists:delete(cacerts, ClientConf)]}]), +    ssl_test_lib:check_result(Server, ok, Client, ok), +    ssl_test_lib:close(Server), +    ssl_test_lib:close(Client). + +  %%--------------------------------------------------------------------  %% Internal functions ------------------------------------------------  %%-------------------------------------------------------------------- diff --git a/lib/ssl/test/ssl_handshake_SUITE.erl b/lib/ssl/test/ssl_handshake_SUITE.erl index 9ae04184e2..b8b9989d30 100644 --- a/lib/ssl/test/ssl_handshake_SUITE.erl +++ b/lib/ssl/test/ssl_handshake_SUITE.erl @@ -40,7 +40,8 @@ all() -> [decode_hello_handshake,  	  decode_single_hello_sni_extension_correctly,  	  decode_empty_server_sni_correctly,  	  select_proper_tls_1_2_rsa_default_hashsign, -	  ignore_hassign_extension_pre_tls_1_2]. +	  ignore_hassign_extension_pre_tls_1_2, +          unorded_chain].  %%--------------------------------------------------------------------  init_per_suite(Config) -> @@ -173,6 +174,29 @@ ignore_hassign_extension_pre_tls_1_2(Config) ->      {md5sha, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, ecdhe_rsa, tls_v1:default_signature_algs({3,2}), {3,2}),      {md5sha, rsa} = ssl_handshake:select_hashsign(HashSigns, Cert, ecdhe_rsa, tls_v1:default_signature_algs({3,0}), {3,0}). +unorded_chain(Config) when is_list(Config) -> +    DefConf = ssl_test_lib:default_cert_chain_conf(), +    CertChainConf = ssl_test_lib:gen_conf(rsa, rsa, DefConf, DefConf), +    #{server_config := ServerConf, +      client_config := _ClientConf} = public_key:pkix_test_data(CertChainConf), +    PeerCert = proplists:get_value(cert, ServerConf), +    CaCerts = [_, C1, C2] = proplists:get_value(cacerts, ServerConf), +    {ok,  ExtractedCerts} = ssl_pkix_db:extract_trusted_certs({der, CaCerts}), +    UnordedChain = case public_key:pkix_is_self_signed(C1) of +                       true -> +                           [C1, C2]; +                       false -> +                           [C2, C1] +                   end, +    OrderedChain = [PeerCert | lists:reverse(UnordedChain)], +    {ok, _, OrderedChain} =  +        ssl_certificate:certificate_chain(PeerCert, ets:new(foo, []), ExtractedCerts, UnordedChain). + + +%%-------------------------------------------------------------------- +%% Internal functions ------------------------------------------------ +%%-------------------------------------------------------------------- +  is_supported(Hash) ->      Algos = crypto:supports(),      Hashs = proplists:get_value(hashs, Algos),  | 
