summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Witczak <kuba@erlang.org>2022-03-17 14:42:20 +0100
committerJakub Witczak <kuba@erlang.org>2022-03-17 15:20:50 +0100
commit29e4ba5c4817c86371e53e9cd15148bd03aab12d (patch)
tree2367beec21207a9d4c2604f712bbc3d19dfd4643
parent45b766fb735bf7dbda9626b4bf12ed7580890f8b (diff)
downloaderlang-29e4ba5c4817c86371e53e9cd15148bd03aab12d.tar.gz
ssl: OCSP test suite cleanup
-rw-r--r--lib/ssl/test/openssl_ocsp_SUITE.erl188
-rw-r--r--lib/ssl/test/ssl_test_lib.hrl1
2 files changed, 42 insertions, 147 deletions
diff --git a/lib/ssl/test/openssl_ocsp_SUITE.erl b/lib/ssl/test/openssl_ocsp_SUITE.erl
index a205bb3714..c4ef30cd9e 100644
--- a/lib/ssl/test/openssl_ocsp_SUITE.erl
+++ b/lib/ssl/test/openssl_ocsp_SUITE.erl
@@ -22,6 +22,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("public_key/include/public_key.hrl").
+-include("ssl_test_lib.hrl").
%% Callback functions
-export([all/0,
@@ -107,7 +108,8 @@ end_per_suite(Config) ->
ResponderPid = proplists:get_value(responder_pid, Config),
ssl_test_lib:close(ResponderPid),
ok = ssl:stop(),
- ssl_test_lib:kill_openssl(), % terminate OpenSSL OCSP responder process
+ %% terminate OpenSSL processes (OCSP responder in particular)
+ ssl_test_lib:kill_openssl(),
application:stop(crypto).
%%--------------------------------------------------------------------
@@ -135,198 +137,96 @@ end_per_testcase(_TestCase, Config) ->
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
-
ocsp_stapling_basic() ->
- [{doc, "Verify OCSP stapling works without nonce "
- "and responder certs."}].
+ [{doc, "Verify OCSP stapling works without nonce and responder certs."}].
ocsp_stapling_basic(Config)
when is_list(Config) ->
- PrivDir = proplists:get_value(priv_dir, Config),
- CACertsFile = filename:join(PrivDir, "a.server/cacerts.pem"),
+ ocsp_stapling_helper(Config, [{ocsp_nonce, false}]).
- Data = "ping", %% 4 bytes
- GroupName = proplists:get_value(group, Config),
- ServerOpts = [{log_level, debug},
- {group, GroupName}],
- Server = ssl_test_lib:start_server(openssl_ocsp,
- [{options, ServerOpts}], Config),
- Port = ssl_test_lib:inet_port(Server),
-
- ClientOpts = ssl_test_lib:ssl_options([{log_level, debug},
- {verify, verify_peer},
- {cacertfile, CACertsFile},
- {server_name_indication, disable},
- {ocsp_stapling, true},
- {ocsp_nonce, false}], Config),
- Client = ssl_test_lib:start_client(erlang,
- [{port, Port},
- {options, ClientOpts}], Config),
- ssl_test_lib:send(Server, Data),
- Data = ssl_test_lib:check_active_receive(Client, Data),
-
- ssl_test_lib:close(Server),
- ssl_test_lib:close(Client).
-%%--------------------------------------------------------------------
ocsp_stapling_with_nonce() ->
[{doc, "Verify OCSP stapling works with nonce."}].
ocsp_stapling_with_nonce(Config)
when is_list(Config) ->
- PrivDir = proplists:get_value(priv_dir, Config),
- CACertsFile = filename:join(PrivDir, "a.server/cacerts.pem"),
-
- Data = "ping", %% 4 bytes
- GroupName = proplists:get_value(group, Config),
- ServerOpts = [{log_level, debug},
- {group, GroupName}],
- Server = ssl_test_lib:start_server(openssl_ocsp,
- [{options, ServerOpts}], Config),
- Port = ssl_test_lib:inet_port(Server),
-
- ClientOpts = ssl_test_lib:ssl_options([{log_level, debug},
- {verify, verify_peer},
- {cacertfile, CACertsFile},
- {server_name_indication, disable},
- {ocsp_stapling, true},
- {ocsp_nonce, true}], Config),
- Client = ssl_test_lib:start_client(erlang,
- [{port, Port},
- {options, ClientOpts}], Config),
- ssl_test_lib:send(Server, Data),
- Data = ssl_test_lib:check_active_receive(Client, Data),
-
- ssl_test_lib:close(Server),
- ssl_test_lib:close(Client).
+ ocsp_stapling_helper(Config, [{ocsp_nonce, true}]).
ocsp_stapling_with_responder_cert() ->
- [{doc, "Verify OCSP stapling works with nonce "
- "and responder certs."}].
+ [{doc, "Verify OCSP stapling works with nonce and responder certs."}].
ocsp_stapling_with_responder_cert(Config)
when is_list(Config) ->
PrivDir = proplists:get_value(priv_dir, Config),
+ {ok, ResponderCert} =
+ file:read_file(filename:join(PrivDir, "b.server/cert.pem")),
+ [{'Certificate', Der, _IsEncrypted}] =
+ public_key:pem_decode(ResponderCert),
+ ocsp_stapling_helper(Config, [{ocsp_nonce, true},
+ {ocsp_responder_certs, [Der]}]).
+
+ocsp_stapling_helper(Config, Opts) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
CACertsFile = filename:join(PrivDir, "a.server/cacerts.pem"),
-
Data = "ping", %% 4 bytes
- GroupName = proplists:get_value(group, Config),
- ServerOpts = [{log_level, debug},
- {group, GroupName}],
+ GroupName = undefined,
+ ServerOpts = [{group, GroupName}],
Server = ssl_test_lib:start_server(openssl_ocsp,
[{options, ServerOpts}], Config),
Port = ssl_test_lib:inet_port(Server),
- PrivDir = proplists:get_value(priv_dir, Config),
- {ok, ResponderCert} =
- file:read_file(filename:join(PrivDir, "b.server/cert.pem")),
- [{'Certificate', Der, _IsEncrypted}] =
- public_key:pem_decode(ResponderCert),
-
- ClientOpts = ssl_test_lib:ssl_options([{log_level, debug},
- {verify, verify_peer},
+ ClientOpts = ssl_test_lib:ssl_options([{verify, verify_peer},
{cacertfile, CACertsFile},
{server_name_indication, disable},
- {ocsp_stapling, true},
- {ocsp_nonce, true},
- {ocsp_responder_certs, [Der]}], Config),
+ {ocsp_stapling, true}] ++ Opts, Config),
Client = ssl_test_lib:start_client(erlang,
[{port, Port},
{options, ClientOpts}], Config),
+ true = is_pid(Client),
ssl_test_lib:send(Server, Data),
Data = ssl_test_lib:check_active_receive(Client, Data),
-
ssl_test_lib:close(Server),
ssl_test_lib:close(Client).
%%--------------------------------------------------------------------
ocsp_stapling_revoked() ->
[{doc, "Verify OCSP stapling works with revoked certificate."}].
ocsp_stapling_revoked(Config)
- when is_list(Config) ->
- PrivDir = proplists:get_value(priv_dir, Config),
- CACertsFile = filename:join(PrivDir, "revoked/cacerts.pem"),
-
- GroupName = proplists:get_value(group, Config),
- ServerOpts = [{log_level, debug},
- {group, GroupName}],
- {ClientNode, _ServerNode, Hostname} = ssl_test_lib:run_where(Config),
-
- Server = ssl_test_lib:start_server(openssl_ocsp_revoked,
- [{options, ServerOpts}], Config),
- Port = ssl_test_lib:inet_port(Server),
-
- ClientOpts = ssl_test_lib:ssl_options([{log_level, debug},
- {verify, verify_peer},
- {server_name_indication, disable},
- {cacertfile, CACertsFile},
- {ocsp_stapling, true},
- {ocsp_nonce, true}
- ], Config),
-
- Client = ssl_test_lib:start_client_error([{node, ClientNode},{port, Port},
- {host, Hostname}, {from, self()},
- {options, ClientOpts}]),
-
- ssl_test_lib:check_client_alert(Client, certificate_revoked).
+ when is_list(Config) ->
+ ocsp_stapling_negative_helper(Config, "revoked/cacerts.pem",
+ openssl_ocsp_revoked, certificate_revoked).
-%%--------------------------------------------------------------------
ocsp_stapling_undetermined() ->
[{doc, "Verify OCSP stapling works with certificate with undetermined status."}].
ocsp_stapling_undetermined(Config)
when is_list(Config) ->
- PrivDir = proplists:get_value(priv_dir, Config),
- CACertsFile = filename:join(PrivDir, "undetermined/cacerts.pem"),
-
- GroupName = proplists:get_value(group, Config),
- ServerOpts = [{log_level, debug},
- {group, GroupName}],
- {ClientNode, _ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+ ocsp_stapling_negative_helper(Config, "undetermined/cacerts.pem",
+ openssl_ocsp_undetermined, bad_certificate).
- Server = ssl_test_lib:start_server(openssl_ocsp_undetermined,
- [{options, ServerOpts}], Config),
- Port = ssl_test_lib:inet_port(Server),
-
- ClientOpts = ssl_test_lib:ssl_options([{log_level, debug},
- {verify, verify_peer},
- {server_name_indication, disable},
- {cacertfile, CACertsFile},
- {ocsp_stapling, true},
- {ocsp_nonce, true}
- ], Config),
-
- Client = ssl_test_lib:start_client_error([{node, ClientNode},{port, Port},
- {host, Hostname}, {from, self()},
- {options, ClientOpts}]),
-
- ssl_test_lib:check_client_alert(Client, bad_certificate).
-
-%%--------------------------------------------------------------------
ocsp_stapling_no_staple() ->
[{doc, "Verify OCSP stapling works with a missing OCSP response."}].
ocsp_stapling_no_staple(Config)
when is_list(Config) ->
- PrivDir = proplists:get_value(priv_dir, Config),
- CACertsFile = filename:join(PrivDir, "a.server/cacerts.pem"),
+ %% Start a server that will not include an OCSP response.
+ ocsp_stapling_negative_helper(Config, "a.server/cacerts.pem",
+ openssl, bad_certificate).
- GroupName = proplists:get_value(group, Config),
- ServerOpts = [{log_level, debug},
- {group, GroupName}],
+ocsp_stapling_negative_helper(Config, CACertsPath, ServerVariant, ExpectedError) ->
+ PrivDir = proplists:get_value(priv_dir, Config),
+ CACertsFile = filename:join(PrivDir, CACertsPath),
+ GroupName = undefined,
+ ServerOpts = [{group, GroupName}],
{ClientNode, _ServerNode, Hostname} = ssl_test_lib:run_where(Config),
-
- %% Start a server that will not include an OCSP response.
- Server = ssl_test_lib:start_server(openssl,
+ Server = ssl_test_lib:start_server(ServerVariant,
[{options, ServerOpts}], Config),
Port = ssl_test_lib:inet_port(Server),
- ClientOpts = ssl_test_lib:ssl_options([{log_level, debug},
- {verify, verify_peer},
+ ClientOpts = ssl_test_lib:ssl_options([{verify, verify_peer},
{server_name_indication, disable},
{cacertfile, CACertsFile},
{ocsp_stapling, true},
{ocsp_nonce, true}
], Config),
-
Client = ssl_test_lib:start_client_error([{node, ClientNode},{port, Port},
{host, Hostname}, {from, self()},
{options, ClientOpts}]),
-
- ssl_test_lib:check_client_alert(Client, bad_certificate).
+ true = is_pid(Client),
+ ssl_test_lib:check_client_alert(Client, ExpectedError).
%%--------------------------------------------------------------------
%% Intrernal functions -----------------------------------------------
@@ -356,20 +256,17 @@ ocsp_responder_init(ResponderPort, PrivDir, Starter) ->
ocsp_responder_loop(Port, {Status, Starter} = State) ->
receive
- stop_ocsp_responder ->
- ct:log("Shut down OCSP responder!~n"),
- ok = ssl_test_lib:close_port(Port);
{_Port, closed} ->
- ct:log("Port Closed~n"),
+ ?LOG("Port Closed"),
ok;
{'EXIT', _Port, Reason} ->
- ct:log("Port Closed ~p~n",[Reason]),
+ ?LOG("Port Closed ~p",[Reason]),
ok;
{Port, {data, _Msg}} when Status == new ->
Starter ! {started, self()},
ocsp_responder_loop(Port, {started, undefined});
{Port, {data, Msg}} ->
- ct:pal("Responder Msg ~p~n",[Msg]),
+ ?PAL("Responder Msg ~p",[Msg]),
ocsp_responder_loop(Port, State)
after 1000 ->
case Status of
@@ -380,9 +277,6 @@ ocsp_responder_loop(Port, {Status, Starter} = State) ->
end
end.
-stop_ocsp_responder(Pid) ->
- Pid ! stop_ocsp_responder.
-
get_free_port() ->
{ok, Listen} = gen_tcp:listen(0, [{reuseaddr, true}]),
{ok, Port} = inet:port(Listen),
diff --git a/lib/ssl/test/ssl_test_lib.hrl b/lib/ssl/test/ssl_test_lib.hrl
index e3bc4fcd34..817e3e0904 100644
--- a/lib/ssl/test/ssl_test_lib.hrl
+++ b/lib/ssl/test/ssl_test_lib.hrl
@@ -1,5 +1,6 @@
-define(FORMAT, "(~s ~p:~p in ~p) ").
-define(ARGS, [erlang:pid_to_list(self()), ?MODULE, ?LINE, ?FUNCTION_NAME]).
+-define(LOG(F), ct:log(?FORMAT ++ F, ?ARGS, [esc_chars])).
-define(LOG(F, Args), ct:log(?FORMAT ++ F, ?ARGS ++ Args, [esc_chars])).
-define(PAL(F, Args), ct:pal(?FORMAT ++ F, ?ARGS ++ Args)).
-define(FAIL(F, Args), ct:fail(?FORMAT ++ F, ?ARGS ++ Args)).