Skip to content

Commit bbcb46f

Browse files
committed
Support exclusive use of tlsv1.3, closes #1011
1 parent 3669516 commit bbcb46f

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

lib/plug/ssl.ex

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,17 @@ defmodule Plug.SSL do
242242
end
243243

244244
defp set_secure_defaults(options) do
245-
options
246-
|> Keyword.put_new(:secure_renegotiate, true)
247-
|> Keyword.put_new(:reuse_sessions, true)
245+
versions = options[:versions] || :ssl.versions()[:supported]
246+
247+
if Enum.any?([:tlsv1, :"tlsv1.1", :"tlsv1.2"], &(&1 in versions)) do
248+
options
249+
|> Keyword.put_new(:secure_renegotiate, true)
250+
|> Keyword.put_new(:reuse_sessions, true)
251+
else
252+
options
253+
|> Keyword.delete(:secure_renegotiate)
254+
|> Keyword.delete(:reuse_sessions)
255+
end
248256
end
249257

250258
defp configure_managed_tls(options) do

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule Plug.MixProject do
33

44
@version "1.14.0-dev"
55
@description "Compose web applications with functions"
6-
@xref_exclude [Plug.Cowboy, :telemetry]
6+
@xref_exclude [Plug.Cowboy, :telemetry, :ssl]
77

88
def project do
99
[

test/plug/ssl_test.exs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,21 @@ defmodule Plug.SSLTest do
55
describe "configure" do
66
import Plug.SSL, only: [configure: 1]
77

8-
test "sets secure_renegotiate and reuse_sessions to true by default" do
9-
assert {:ok, opts} = configure(key: "abcdef", cert: "ghijkl")
8+
test "sets secure_renegotiate and reuse_sessions to true depending on the version" do
9+
assert {:ok, opts} = configure(key: "abcdef", cert: "ghijkl", versions: [:tlsv1])
1010
assert opts[:reuse_sessions] == true
1111
assert opts[:secure_renegotiate] == true
1212
assert opts[:honor_cipher_order] == nil
1313
assert opts[:client_renegotiation] == nil
1414
assert opts[:cipher_suite] == nil
1515

16+
assert {:ok, opts} = configure(key: "abcdef", cert: "ghijkl", versions: [:"tlsv1.3"])
17+
assert opts[:reuse_sessions] == nil
18+
assert opts[:secure_renegotiate] == nil
19+
assert opts[:honor_cipher_order] == nil
20+
assert opts[:client_renegotiation] == nil
21+
assert opts[:cipher_suite] == nil
22+
1623
assert {:ok, opts} = configure(key: "abcdef", cert: "ghijkl", reuse_sessions: false)
1724
assert opts[:reuse_sessions] == false
1825
end

0 commit comments

Comments
 (0)