CMake: 変数「CMAKE_TLS_VERIFY」でHTTPS通信のセキュリティを強化! ダウンロードとアップロードを安全に


CMAKE_TLS_VERIFY は、CMake の環境変数であり、file(DOWNLOAD)file(UPLOAD) コマンドの TLS_VERIFY オプションのデフォルト値を指定します。この変数が設定されていない場合は、CMAKE_TLS_VERIFY 環境変数がチェックされます。どちらも設定されていない場合は、デフォルトは OFF となります。

TLS 検証とは

TLS 検証は、HTTPS などの暗号化された接続で、クライアントがサーバーとの接続を確立する際に、サーバーの証明書の有効性を検証するプロセスです。これは、サーバーが本物であり、なりすましではないことを確認するために重要です。

CMAKE_TLS_VERIFY の設定

CMAKE_TLS_VERIFY は、次のいずれかの方法で設定できます。

  • 環境変数として設定: CMAKE_TLS_VERIFY=ON または CMAKE_TLS_VERIFY=OFF
  • CMakeLists.txt ファイルで設定: set(CMAKE_TLS_VERIFY ON) または set(CMAKE_TLS_VERIFY OFF)
  • CMake コマンドラインで設定: -DCMAKE_TLS_VERIFY=ON または -DCMAKE_TLS_VERIFY=OFF

次の例では、CMAKE_TLS_VERIFYON に設定し、すべての file(DOWNLOAD) コマンドで TLS 検証を有効にします。

set(CMAKE_TLS_VERIFY ON)

注意事項

  • TLS 検証を無効にする必要がある場合は、慎重に検討する必要があります。
  • TLS 検証を無効にすることは、セキュリティ上のリスクを伴います。
  • CMAKE_TLS_VERIFY は、CMake バージョン 3.30 以降でのみ使用できます。

CMAKE_TLS_VERIFY は、TLS 検証をグローバルに設定する方法を提供します。特定の file(DOWNLOAD) または file(UPLOAD) コマンドに対して TLS 検証を制御したい場合は、TLS_VERIFY オプションを直接使用できます。



例 1: CMake コマンドラインで設定

cmake -DCMAKE_TLS_VERIFY=ON .

このコマンドは、現在のディレクトリ (.) をビルドディレクトリとして設定し、CMAKE_TLS_VERIFYON に設定します。これにより、すべての file(DOWNLOAD) コマンドで TLS 検証が有効になります。

例 2: CMakeLists.txt ファイルで設定

cmake_minimum_required(VERSION 3.30)

set(CMAKE_TLS_VERIFY ON)

project(MyProject)

file(DOWNLOAD "https://example.com/file.zip" DESTINATION "downloads")

この CMakeLists.txt ファイルは、MyProject という名前のプロジェクトを作成し、https://example.com/file.zip から downloads ディレクトリにファイルをダウンロードします。CMAKE_TLS_VERIFYON に設定されているため、このダウンロード操作では TLS 検証が有効になります。

例 3: 環境変数として設定

CMAKE_TLS_VERIFY=ON cmake .

このコマンドは、CMAKE_TLS_VERIFY 環境変数を ON に設定してから、現在のディレクトリ (.) をビルドディレクトリとして設定します。これにより、すべての file(DOWNLOAD) コマンドで TLS 検証が有効になります。

例 4: 特定の file(DOWNLOAD) コマンドに対して TLS 検証を制御

cmake_minimum_required(VERSION 3.30)

set(CMAKE_TLS_VERIFY OFF)

project(MyProject)

file(DOWNLOAD "https://example.com/file.zip" DESTINATION "downloads" TLS_VERIFY ON)

この CMakeLists.txt ファイルは、MyProject という名前のプロジェクトを作成し、https://example.com/file.zip から downloads ディレクトリにファイルをダウンロードします。CMAKE_TLS_VERIFYOFF に設定されていますが、file(DOWNLOAD) コマンドには TLS_VERIFY オプションが ON に設定されているため、このダウンロード操作では TLS 検証が有効になります。

これらの例は、CMAKE_TLS_VERIFY を使用して TLS 検証を制御する方法をいくつか示しています。

  • カスタムの TLS 検証ロジックを実装する
  • 特定の CA (認証局) を使用する
  • 特定のホスト名に対して TLS 検証を無効にする

これらの詳細については、CMake ドキュメントを参照してください。

  • TLS 検証を無効にする必要がある場合は、慎重に検討する必要があります。
  • TLS 検証を無効にすることは、セキュリティ上のリスクを伴います。
  • 上記の例は、説明のみを目的としています。実際のプロジェクトで使用するには、ニーズに合わせて調整する必要があります。


代替方法

CMAKE_TLS_VERIFY の代替方法はいくつかあります。

  • TLS_VERIFY オプションを直接使用する

file(DOWNLOAD) または file(UPLOAD) コマンドで TLS_VERIFY オプションを直接使用して、そのコマンドに対する TLS 検証を制御できます。

file(DOWNLOAD "https://example.com/file.zip" DESTINATION "downloads" TLS_VERIFY ON)

この例では、https://example.com/file.zip から downloads ディレクトリにファイルをダウンロードし、このダウンロード操作で TLS 検証を有効にします。

  • CMAKE_ARGS を使用する

CMAKE_ARGS 変数を使用して、file(DOWNLOAD) または file(UPLOAD) コマンドに渡されるコマンドライン引数に追加の引数を指定できます。この方法を使用して、TLS_VERIFY オプションを指定できます。

set(CMAKE_ARGS "${CMAKE_ARGS} -DCMAKE_TLS_VERIFY=ON")

file(DOWNLOAD "https://example.com/file.zip" DESTINATION "downloads")

この例では、-DCMAKE_TLS_VERIFY=ON 引数を CMAKE_ARGS に追加し、すべての file(DOWNLOAD) コマンドで TLS 検証を有効にします。

  • ExternalProject_Add を使用する

ExternalProject_Add モジュールを使用して、外部プロジェクトをビルドする場合、TLS_VERIFY オプションを指定するオプションがあります。

ExternalProject_Add(MyProject
  SOURCE_DIR https://example.com/MyProject
  DOWNLOAD_COMMAND ${CMAKE_BINARY_DIR}/cmake --download
  BUILD_COMMAND ${CMAKE_BINARY_DIR}/cmake --build
  INSTALL_COMMAND ${CMAKE_BINARY_DIR}/cmake --install
  TLS_VERIFY ON
)

この例では、https://example.com/MyProject から MyProject という名前の外部プロジェクトをビルドし、このプロジェクトのダウンロードとビルド中に TLS 検証を有効にします。

  • TLS 検証を無効にする必要がある場合は、慎重に検討する必要があります。
  • TLS 検証を無効にすることは、セキュリティ上のリスクを伴います。
  • 使用する代替方法は、ニーズと要件によって異なります。
  • 上記の代替方法は、互いに排他的ではありません。