@@ -590,9 +590,9 @@ process_options(UserSslOpts, SslOpts0, Env) ->
590590 SslOpts1 = opt_protocol_versions (UserSslOptsMap , SslOpts0 , Env ),
591591 SslOpts2 = opt_verification (UserSslOptsMap , SslOpts1 , Env ),
592592 SslOpts3 = opt_certs (UserSslOptsMap , SslOpts2 , Env ),
593- SslOpts4 = opt_tickets (UserSslOptsMap , SslOpts3 , Env ),
594- SslOpts5 = opt_stapling (UserSslOptsMap , SslOpts4 , Env ),
595- SslOpts6 = opt_sni (UserSslOptsMap , SslOpts5 , Env ),
593+ SslOpts4 = opt_sni (UserSslOptsMap , SslOpts3 , Env ),
594+ SslOpts5 = opt_tickets (UserSslOptsMap , SslOpts4 , Env ),
595+ SslOpts6 = opt_stapling (UserSslOptsMap , SslOpts5 , Env ),
596596 SslOpts7 = opt_signature_algs (UserSslOptsMap , SslOpts6 , Env ),
597597 SslOpts8 = opt_alpn (UserSslOptsMap , SslOpts7 , Env ),
598598 SslOpts9 = opt_mitigation (UserSslOptsMap , SslOpts8 , Env ),
@@ -942,7 +942,8 @@ opt_cacerts(UserOpts, #{verify := Verify, log_level := LogLevel, versions := Ver
942942 {new , FileName } -> unambiguous_path (FileName );
943943 {_ , FileName } -> FileName
944944 end ,
945- option_incompatible (CaCertFile =:= <<>> andalso CaCerts =:= undefined andalso Verify =:= verify_peer ,
945+ option_incompatible (CaCertFile =:= <<>> andalso CaCerts =:= undefined andalso
946+ Verify =:= verify_peer ,
946947 [{verify , verify_peer }, {cacerts , undefined }]),
947948
948949 {Where2 , CA } = get_opt_bool (certificate_authorities , Role =:= server , UserOpts , Opts ),
@@ -957,24 +958,33 @@ opt_cacerts(UserOpts, #{verify := Verify, log_level := LogLevel, versions := Ver
957958 Opts2 = set_opt_new (Where2 , certificate_authorities , Role =:= server , CA , Opts1 ),
958959 Opts2 #{cacerts => CaCerts }.
959960
960- opt_tickets (UserOpts , #{versions := Versions } = Opts , #{role := client }) ->
961- {_ , SessionTickets } = get_opt_of (session_tickets , [disabled ,manual ,auto ], disabled , UserOpts , Opts ),
961+ opt_tickets (UserOpts , #{versions := Versions } = Opts ,
962+ #{role := client }) ->
963+ {_ , SessionTickets } = get_opt_of (session_tickets , [disabled ,manual ,auto ], disabled ,
964+ UserOpts , Opts ),
962965 assert_version_dep (SessionTickets =/= disabled , session_tickets , Versions , ['tlsv1.3' ]),
963966
964- {_ , UseTicket } = get_opt_list (use_ticket , undefined , UserOpts , Opts ),
965- option_error (UseTicket =:= [], use_ticket , UseTicket ),
966- option_incompatible (UseTicket =/= undefined andalso SessionTickets =/= manual ,
967- [{use_ticket , UseTicket }, {session_tickets , SessionTickets }]),
967+ {_ , UseTickets } = get_opt_list (use_ticket , undefined , UserOpts , Opts ),
968+ case (SessionTickets == manual ) andalso UseTickets =/= undefined of
969+ true ->
970+ verify_use_tickets (UseTickets , maps :get (server_name_indication , Opts ));
971+ _ ->
972+ ok
973+ end ,
974+ option_error (UseTickets =:= [], use_ticket , UseTickets ),
975+ option_incompatible (UseTickets =/= undefined andalso SessionTickets =/= manual ,
976+ [{use_ticket , UseTickets }, {session_tickets , SessionTickets }]),
968977
969978 {_ , EarlyData } = get_opt_bin (early_data , undefined , UserOpts , Opts ),
970979 option_incompatible (is_binary (EarlyData ) andalso SessionTickets =:= disabled ,
971980 [early_data , {session_tickets , disabled }]),
972- option_incompatible (is_binary (EarlyData ) andalso SessionTickets =:= manual andalso UseTicket =:= undefined ,
981+ option_incompatible (is_binary (EarlyData ) andalso SessionTickets =:= manual andalso
982+ UseTickets =:= undefined ,
973983 [early_data , {session_tickets , manual }, {use_ticket , undefined }]),
974984
975985 assert_server_only (anti_replay , UserOpts ),
976986 assert_server_only (stateless_tickets_seed , UserOpts ),
977- Opts #{session_tickets => SessionTickets , use_ticket => UseTicket , early_data => EarlyData };
987+ Opts #{session_tickets => SessionTickets , use_ticket => UseTickets , early_data => EarlyData };
978988opt_tickets (UserOpts , #{versions := Versions } = Opts , #{role := server }) ->
979989 {_ , SessionTickets } =
980990 get_opt_of (session_tickets ,
@@ -995,8 +1005,10 @@ opt_tickets(UserOpts, #{versions := Versions} = Opts, #{role := server}) ->
9951005 {_ , undefined } -> undefined ;
9961006 {_ ,AR } when not Stateless ->
9971007 option_incompatible ([{anti_replay , AR }, {session_tickets , SessionTickets }]);
998- {_ ,'10k' } -> {10 , 5 , 72985 }; % % n = 10000 p = 0.030003564 (1 in 33) m = 72985 (8.91KiB) k = 5
999- {_ ,'100k' } -> {10 , 5 , 729845 }; % % n = 10000 p = 0.03000428 (1 in 33) m = 729845 (89.09KiB) k = 5
1008+ % % n = 10000 p = 0.030003564 (1 in 33) m = 72985 (8.91KiB) k = 5
1009+ {_ ,'10k' } -> {10 , 5 , 72985 };
1010+ % % n = 10000 p = 0.03000428 (1 in 33) m = 729845 (89.09KiB) k = 5
1011+ {_ ,'100k' } -> {10 , 5 , 729845 };
10001012 {_ , {_ ,_ ,_ } = AR } -> AR ;
10011013 {_ , AR } -> option_error (anti_replay , AR )
10021014 end ,
@@ -1009,6 +1021,13 @@ opt_tickets(UserOpts, #{versions := Versions} = Opts, #{role := server}) ->
10091021 Opts #{session_tickets => SessionTickets , early_data => EarlyData ,
10101022 anti_replay => AntiReplay , stateless_tickets_seed => STS }.
10111023
1024+ verify_use_tickets ([], _ ) ->
1025+ true ;
1026+ verify_use_tickets ([#{sni := SNI } | Tickests ], SNI ) ->
1027+ verify_use_tickets (Tickests , SNI );
1028+ verify_use_tickets ([Ticket | _ ], SNI ) ->
1029+ option_error (ticket_for_other_SNI , {Ticket , SNI }).
1030+
10121031opt_stapling (UserOpts , #{versions := _Versions } = Opts , #{role := client }) ->
10131032 {Stapling , Nonce } =
10141033 case get_opt (stapling , ? DEFAULT_STAPLING_OPT , UserOpts , Opts ) of
@@ -1111,7 +1130,8 @@ valid_signature_algs_cert(#{versions := Versions} = Opts, UserOpts, TlsVersion)
11111130 {_ , Schemes } ->
11121131 Schemes
11131132 end .
1114- valid_signature_algs (AlgCertSchemes0 , #{versions := Versions } = Opts , UserOpts , [TlsVersion | _ ] = TlsVsns ) ->
1133+ valid_signature_algs (AlgCertSchemes0 , #{versions := Versions } = Opts , UserOpts ,
1134+ [TlsVersion | _ ] = TlsVsns ) ->
11151135 case get_opt_list (signature_algs , undefined , UserOpts , Opts ) of
11161136 {default , undefined } ->
11171137 % % Smooth upgrade path allow rsa_pkcs1_sha1 for signatures_algs_cert
0 commit comments