CMAKE_TLS_VERIFY:環境変数、GUI、C++コードなど、多彩な設定方法

2024-04-02

CMAKE_TLS_VERIFYの詳細解説:安全なダウンロードと信頼できる接続を実現

CMAKE_TLS_VERIFY は、CMakeVariables における重要な設定項目です。これは、file(DOWNLOAD)file(UPLOAD) コマンド、および ExternalProjectFetchContent モジュールによる内部的な file(DOWNLOAD) 呼び出しにおいて、TLS 検証 を有効にするかどうかを制御します。

TLS 検証とは?

TLS 検証は、ダウンロードやアップロードの際に通信相手が信頼できるものであることを確認するためのセキュリティ対策です。具体的には、以下の項目を検証します。

  • サーバ証明書の有効性:有効期限、発行者、ホスト名などが正しいことを確認
  • サーバ証明書の信頼性:信頼できる認証局によって発行された証明書であることを確認

デフォルト設定と推奨設定

デフォルトでは、CMAKE_TLS_VERIFYOFF に設定されています。これは、古いシステムや一部のネットワーク環境では、TLS 検証がうまく動作しない場合があるためです。

しかし、セキュリティ上の理由から、可能な限り CMAKE_TLS_VERIFY を ON に設定することを強く推奨します

設定方法

CMAKE_TLS_VERIFY は、以下の方法で設定できます。

  • CMakeLists.txt ファイルで直接設定する:
set(CMAKE_TLS_VERIFY ON)
  • コマンドラインオプションで設定する:
cmake -DCMAKE_TLS_VERIFY=ON ..

設定時の注意点

  • CMAKE_TLS_VERIFYON に設定すると、ダウンロードやアップロード処理が遅くなる場合があります。
  • 古いシステムや一部のネットワーク環境では、TLS 検証がうまく動作しない場合があります。
  • 信頼できないネットワーク環境では、TLS 検証を有効にしても十分なセキュリティが確保できない場合があります。

補足

  • HTTPS は、TLS を使用して通信を行うセキュリティで保護されたプロトコルです。
  • cURL は、file(DOWNLOAD)file(UPLOAD) コマンドで使用されるライブラリであり、TLS 検証機能を備えています。
  • 信頼できる認証局 とは、広く信頼されている機関によって発行された証明書を発行する機関です。

この解説が、CMAKE_TLS_VERIFY の理解と安全な開発に役立つことを願っています。



CMAKE_TLS_VERIFY のサンプルコード

set(CMAKE_TLS_VERIFY ON)

file(DOWNLOAD https://example.com/file.zip DESTINATION ${CMAKE_BINARY_DIR})

コマンドラインオプションで設定する

cmake -DCMAKE_TLS_VERIFY=ON ..

外部プロジェクトで設定する

ExternalProject_Add(myproject
  URL https://example.com/project.git
  TLS_VERIFY ON
)

FetchContent モジュールで設定する

FetchContent_Declare(
  myproject
  GIT_REPOSITORY https://example.com/project.git
  TLS_VERIFY ON
)

cURL オプションを直接設定する

file(DOWNLOAD https://example.com/file.zip DESTINATION ${CMAKE_BINARY_DIR}
  CURL_OPTIONS "-k")

特定のホストのみ検証を有効にする

set(CMAKE_TLS_VERIFY_HOSTNAMES "example.com")

file(DOWNLOAD https://example.com/file.zip DESTINATION ${CMAKE_BINARY_DIR})

CA ファイルを指定する

set(CMAKE_TLS_CA_FILE "/path/to/ca.pem")

file(DOWNLOAD https://example.com/file.zip DESTINATION ${CMAKE_BINARY_DIR})

詳細な設定

set(CMAKE_TLS_VERIFY_DEPTH 10)
set(CMAKE_TLS_CIPHER_LIST "TLSv1.3+HIGH:!ECDHE-RSA-AES128-GCM-SHA256")

file(DOWNLOAD https://example.com/file.zip DESTINATION ${CMAKE_BINARY_DIR})

これらのサンプルコードは、CMAKE_TLS_VERIFY をさまざまな方法で設定する方法を示しています。

注意:

  • これらのサンプルコードは、あくまでも参考例です。実際の使用環境に合わせて、適宜変更する必要があります。
  • 詳細については、CMake のドキュメントを参照してください。


CMAKE_TLS_VERIFY の設定方法:その他の方法

CMAKE_TLS_VERIFY は、環境変数 CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEER を介して設定することもできます。これらの環境変数は、CMake の内部で使用される cURL ライブラリに渡されます。

例:

export CURLOPT_SSL_VERIFYHOST=1
export CURLOPT_SSL_VERIFYPEER=1

cmake ..

CMake GUI

CMake GUI を使用している場合は、File > New > CMakeLists.txt で新しい CMakeLists.txt ファイルを作成し、以下のコードを追加します。

set(CMAKE_TLS_VERIFY ON)

次に、Configure をクリックして CMake を実行します。

C++ コードから直接 file(DOWNLOAD)file(UPLOAD) コマンドを呼び出す場合は、CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEER オプションを curl_easy_setopt() 関数に渡すことができます。

例:

#include <curl/curl.h>

int main() {
  CURL *curl = curl_easy_init();
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file.zip");
  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);
  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);

  CURLcode res = curl_easy_perform(curl);
  curl_easy_cleanup(curl);

  return res;
}

その他のツール

CMake 以外に、wgetcurl などのツールを使用してファイルをダウンロードすることもできます。これらのツールは、--ca-certificate オプションや --insecure オプションを使用して TLS 検証を制御できます。

例:

wget --ca-certificate /path/to/ca.pem https://example.com/file.zip

手動による検証

どうしても TLS 検証を無効化したい場合は、手動で証明書を検証することができます。

手順:

  1. サーバ証明書をダウンロードします。
  2. 信頼できる認証局によって発行された証明書であることを確認します。
  3. ダウンロードした証明書を信頼できる証明書ストアに追加します。

注意事項:

  • 手動による検証は、セキュリティ上のリスクを伴います。
  • 信頼できない証明書を信頼できる証明書ストアに追加すると、中間者攻撃などのセキュリティ攻撃を受ける可能性があります。

これらの方法は、CMAKE_TLS_VERIFY を設定する代替手段として使用できます。

注意:

  • 詳細については、それぞれのツールのドキュメントを参照してください。



CMake find_file() コマンドの代替方法:もっと柔軟なファイル検索

<variable>: 検索結果を格納する CMake 変数<file_names>: 検索するファイル名のリスト (スペース区切り)<path_list>: 検索するパス名のリスト (スペース区切り)<options>: 検索オプション (後述)



CMake find_libraryコマンドとfind_packageモジュールの比較

find_library() コマンドは、CMake で外部ライブラリを見つけるために使用されます。これは、プロジェクトに必要なライブラリを自動的に検出して、ビルドプロセスを簡略化するのに役立ちます。コマンドフォーマット<VAR>: 検索結果を格納する変数名


C++標準ライブラリ、テンプレートエンジン、シェルスクリプト... string()コマンドの代替方法を徹底比較

CMakeのstring()コマンドは、文字列処理を行うための強力なツールです。C++のstd::stringのような機能に加え、CMake特有の便利な機能も備えています。主な機能文字列の連結、分割、置換、比較大文字・小文字変換部分文字列の抽出


CMake try_compile() を使って特定のライブラリがインストールされているかどうかを確認する方法

try_compile() は、CMake の強力なコマンドの一つで、コードを実際にコンパイルすることなく、コンパイルが成功するかどうかを確認することができます。これは、特定のコンパイラやオプションがシステム上で使用可能かどうかをテストしたり、コードの移植性を検証したりする際に非常に便利です。


CMake の if() コマンド: デバッグとトラブルシューティング

構文条件式if() コマンドの引数には、条件式を指定します。条件式は、以下のいずれかの形式で記述できます。変数の比較: <variable> <operator> <value>コマンドの存在チェック: COMMAND <command-name>



CMakeにおけるCMAKE_CROSSCOMPILING変数の詳細解説

CMAKE_CROSSCOMPILING変数は、CMakeがクロスコンパイル環境で実行されているかどうかを判断するために使用されます。これは、ターゲットプラットフォームとビルドプラットフォームが異なる場合に設定されます。設定方法CMAKE_CROSSCOMPILING変数は、以下の方法で設定できます。


WinRTアプリケーション開発におけるVS_WINRT_REFERENCES

VS_WINRT_REFERENCESは、CMakeのターゲットプロパティの一つで、Visual Studioプロジェクトファイル( .vcxproj )にWinRTメタデータ参照を追加するために使用されます。これは、Windows Runtime (WinRT) アプリケーション開発において重要な役割を果たします。


CMakeポリシー CMP0094 を徹底解説:プロジェクトのソースツリーの変更を検知する

この解説では、CMP0094ポリシーについて詳しく説明します。このポリシーは、プロジェクトのソースツリーが変更されたかどうかを検知し、必要に応じてビルドプロセスを再実行するのに役立ちます。CMP0094ポリシーは、以下の2つの主要な機能を提供します。


CMakeでVisual Studio ソリューションのソースコード管理を楽にする「VS_SCC_LOCALPATH」

"VS_SCC_LOCALPATH" は、CMake の "Properties: Targets" で使用されるプロパティです。Visual Studio ソリューション内でソースコード管理 (SCC) を使用する際に、ソースファイルのローカルパスを指定するために使用されます。


CMake: CMAKE_RUNTIME_OUTPUT_DIRECTORY変数を使って出力ディレクトリを制御

CMAKE_RUNTIME_OUTPUT_DIRECTORY は、CMake でビルドされた実行可能ファイル(exeファイルなど)の出力ディレクトリを指定する変数です。これは、ビルドされた実行ファイルをどこに配置するかを制御するのに役立ちます。