summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-09-27 12:02:13 (GMT)
committerKitware Robot <kwrobot@kitware.com>2024-09-27 12:03:01 (GMT)
commitf7e2422c3e4361053d1ad9f1e009d3f078aa7b03 (patch)
tree7a117808bbfcf9bc2b5cd1751e4c831c5bc635d7
parent5701ba7484a917c11e256e0a7a95ccad1ee1acbc (diff)
parent38390245a2ceebe6ece3859e887442b8cce01297 (diff)
downloadCMake-f7e2422c3e4361053d1ad9f1e009d3f078aa7b03.zip
CMake-f7e2422c3e4361053d1ad9f1e009d3f078aa7b03.tar.gz
CMake-f7e2422c3e4361053d1ad9f1e009d3f078aa7b03.tar.bz2
Merge topic 'curl-tls-version'
38390245a2 ctest: Require minimum TLS 1.2 by default 5e1a59dc2b file(DOWNLOAD/UPLOAD): Require minimum TLS 1.2 by default Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9848
-rw-r--r--Help/command/file.rst4
-rw-r--r--Help/manual/ctest.1.rst4
-rw-r--r--Help/release/dev/curl-tls-version.rst10
-rw-r--r--Help/variable/CMAKE_TLS_VERSION.rst5
-rw-r--r--Source/CTest/cmCTestCurl.cxx4
-rw-r--r--Source/cmFileCommand.cxx17
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-darwin.txt2
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-windows.txt2
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout.txt1
-rw-r--r--Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad.cmake10
10 files changed, 51 insertions, 8 deletions
diff --git a/Help/command/file.rst b/Help/command/file.rst
index 40689c9..890bdf4 100644
--- a/Help/command/file.rst
+++ b/Help/command/file.rst
@@ -811,6 +811,10 @@ Transfer
environment variable will be used instead.
See :variable:`CMAKE_TLS_VERSION` for allowed values.
+ .. versionchanged:: 3.31
+ The default is TLS 1.2.
+ Previously, no minimum version was enforced by default.
+
``TLS_VERIFY <ON|OFF>``
Specify whether to verify the server certificate for ``https://`` URLs.
If this option is not specified, the value of the
diff --git a/Help/manual/ctest.1.rst b/Help/manual/ctest.1.rst
index 4793ef5..9281339 100644
--- a/Help/manual/ctest.1.rst
+++ b/Help/manual/ctest.1.rst
@@ -1560,6 +1560,10 @@ Configuration settings include:
* `CTest Script`_ variable: :variable:`CTEST_TLS_VERSION`
* :module:`CTest` module variable: ``CTEST_TLS_VERSION``
+ .. versionchanged:: 3.31
+ The default is TLS 1.2.
+ Previously, no minimum version was enforced by default.
+
``TLSVerify``
.. versionadded:: 3.30
diff --git a/Help/release/dev/curl-tls-version.rst b/Help/release/dev/curl-tls-version.rst
new file mode 100644
index 0000000..ea142b3
--- /dev/null
+++ b/Help/release/dev/curl-tls-version.rst
@@ -0,0 +1,10 @@
+curl-tls-version
+----------------
+
+* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands now
+ require TLS 1.2 or higher for connections to ``https://`` URLs by default.
+ See the :variable:`CMAKE_TLS_VERSION` variable for details.
+
+* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>`
+ step now require TLS 1.2 or higher for connections to ``https://`` URLs by
+ default. See the :variable:`CTEST_TLS_VERSION` variable for details.
diff --git a/Help/variable/CMAKE_TLS_VERSION.rst b/Help/variable/CMAKE_TLS_VERSION.rst
index 3e7f2ce..ff0918b 100644
--- a/Help/variable/CMAKE_TLS_VERSION.rst
+++ b/Help/variable/CMAKE_TLS_VERSION.rst
@@ -7,6 +7,11 @@ Specify the default value for the :command:`file(DOWNLOAD)` and
:command:`file(UPLOAD)` commands' ``TLS_VERSION`` option.
If this variable is not set, the commands check the
:envvar:`CMAKE_TLS_VERSION` environment variable.
+If neither is set, the default is TLS 1.2.
+
+.. versionchanged:: 3.31
+ The default is TLS 1.2.
+ Previously, no minimum version was enforced by default.
The value may be one of:
diff --git a/Source/CTest/cmCTestCurl.cxx b/Source/CTest/cmCTestCurl.cxx
index d9dc3b2..b203a51 100644
--- a/Source/CTest/cmCTestCurl.cxx
+++ b/Source/CTest/cmCTestCurl.cxx
@@ -16,6 +16,7 @@
namespace {
const bool TLS_VERIFY_DEFAULT = true;
+const int TLS_VERSION_DEFAULT = CURL_SSLVERSION_TLSv1_2;
}
cmCTestCurl::cmCTestCurl(cmCTest* ctest)
@@ -65,6 +66,9 @@ cmCTestCurlOpts::cmCTestCurlOpts(cmCTest* ctest)
{
this->TLSVersionOpt =
cmCurlParseTLSVersion(ctest->GetCTestConfiguration("TLSVersion"));
+ if (!this->TLSVersionOpt.has_value()) {
+ this->TLSVersionOpt = TLS_VERSION_DEFAULT;
+ }
std::string tlsVerify = ctest->GetCTestConfiguration("TLSVerify");
if (!tlsVerify.empty()) {
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 30d92ca..92e6b3e 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -1741,6 +1741,7 @@ bool HandleNativePathCommand(std::vector<std::string> const& args,
#if !defined(CMAKE_BOOTSTRAP)
const bool TLS_VERIFY_DEFAULT = true;
+const std::string TLS_VERSION_DEFAULT = "1.2";
// Stuff for curl download/upload
using cmFileCommandVectorOfChar = std::vector<char>;
@@ -2128,6 +2129,11 @@ bool HandleDownloadCommand(std::vector<std::string> const& args,
tlsVersionOpt = std::move(v);
}
}
+ bool tlsVersionDefaulted = false;
+ if (!tlsVersionOpt.has_value()) {
+ tlsVersionOpt = TLS_VERSION_DEFAULT;
+ tlsVersionDefaulted = true;
+ }
// Can't calculate hash if we don't save the file.
// TODO Incrementally calculate hash in the write callback as the file is
@@ -2212,6 +2218,9 @@ bool HandleDownloadCommand(std::vector<std::string> const& args,
if (tlsVersionOpt.has_value()) {
if (cm::optional<int> v = cmCurlParseTLSVersion(*tlsVersionOpt)) {
res = ::curl_easy_setopt(curl, CURLOPT_SSLVERSION, *v);
+ if (tlsVersionDefaulted && res == CURLE_NOT_BUILT_IN) {
+ res = CURLE_OK;
+ }
check_curl_result(res,
cmStrCat("DOWNLOAD cannot set TLS/SSL version ",
*tlsVersionOpt, ": "));
@@ -2554,6 +2563,11 @@ bool HandleUploadCommand(std::vector<std::string> const& args,
tlsVersionOpt = std::move(v);
}
}
+ bool tlsVersionDefaulted = false;
+ if (!tlsVersionOpt.has_value()) {
+ tlsVersionOpt = TLS_VERSION_DEFAULT;
+ tlsVersionDefaulted = true;
+ }
// Open file for reading:
//
@@ -2603,6 +2617,9 @@ bool HandleUploadCommand(std::vector<std::string> const& args,
if (tlsVersionOpt.has_value()) {
if (cm::optional<int> v = cmCurlParseTLSVersion(*tlsVersionOpt)) {
res = ::curl_easy_setopt(curl, CURLOPT_SSLVERSION, *v);
+ if (tlsVersionDefaulted && res == CURLE_NOT_BUILT_IN) {
+ res = CURLE_OK;
+ }
check_curl_result(
res,
cmStrCat("UPLOAD cannot set TLS/SSL version ", *tlsVersionOpt, ": "));
diff --git a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-darwin.txt b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-darwin.txt
index 730cf59..3632a61 100644
--- a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-darwin.txt
+++ b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-darwin.txt
@@ -1,4 +1,4 @@
--- def-1\.1: 0;"No error"
+-- def-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
-- env-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
-- env-1\.1: 0;"No error"
-- var-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
diff --git a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-windows.txt b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-windows.txt
index 730cf59..3632a61 100644
--- a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-windows.txt
+++ b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout-windows.txt
@@ -1,4 +1,4 @@
--- def-1\.1: 0;"No error"
+-- def-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
-- env-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
-- env-1\.1: 0;"No error"
-- var-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
diff --git a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout.txt b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout.txt
index 34d99d1..ce313ed 100644
--- a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout.txt
+++ b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad-stdout.txt
@@ -1,3 +1,4 @@
+-- def-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
-- env-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
-- var-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
-- opt-1\.2: (60;"SSL peer certificate or SSH remote key was not OK"|35;"SSL connect error")
diff --git a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad.cmake b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad.cmake
index 106fe44..51cb8f2 100644
--- a/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad.cmake
+++ b/Tests/RunCMake/file-DOWNLOAD/TLS_VERSION-bad.cmake
@@ -19,12 +19,10 @@ else()
set(TEST_TLSv1_1 0)
endif()
-if(TEST_TLSv1_1)
- # The default is to allow 1.1.
- unset(ENV{CMAKE_TLS_VERSION})
- unset(CMAKE_TLS_VERSION)
- download(def-1.1)
-endif()
+# The default is to require 1.2.
+unset(ENV{CMAKE_TLS_VERSION})
+unset(CMAKE_TLS_VERSION)
+download(def-1.2)
# The environment variable overrides the default.
set(ENV{CMAKE_TLS_VERSION} 1.2)