Files
cpp-httplib/docs/tls/checklist.md
2026-01-12 17:15:38 -05:00

3.9 KiB
Raw Blame History

TLS 抽象化移行チェックリスト

各フェーズで以下を確認すること。

基本チェック項目

  • 既存の公開 API に破壊的変更がない
  • 既存テスト全通過 (cd test && make)
  • 分割ビルドテスト通過 (cd test && make test_split)
  • 新規コードに対応するテスト追加
  • メモリリークなし (valgrind/AddressSanitizer)
  • コンパイル警告なし
  • make style_check 通過

実装方針

詳細は httplib_tls_migration.ja.md を参照。

フェーズ別チェック

フェーズ 1: TLS 抽象化 API の追加

  • namespace detail::tls を宣言エリアに追加
  • ErrorCode enum を定義
  • TlsError 構造体を定義
  • tls_ctx_t, tls_session_t 型を定義
  • 関数宣言を追加
  • 実装エリアに OpenSSL バックエンド実装を追加
  • 既存コードは変更していない(新 API 追加のみ)
  • make test_split 通過

フェーズ 2: SSLClient と SSLSocketStream の移行

  • SSLSocketStreamtls_session_t を受け取るように変更
  • SSLSocketStream::read()tls_read() に置き換え
  • SSLSocketStream::write()tls_write() に置き換え
  • SSLClient が抽象化 API を使用
    • SSLClient::initialize_ssl()tls_create_session(), tls_connect_nonblocking() 等で移行
    • tls_set_sni() を追加SNI のみ設定、検証モードは変更しない)
    • tls_connect_nonblocking(), tls_accept_nonblocking() を追加
  • CA 証明書の読み込みが動作
  • クライアント証明書認証が動作
  • SNI とホスト名検証が動作
  • 大容量データ転送テスト通過
  • タイムアウト処理が正常動作
    • tls_is_peer_closed()socket_t sock パラメータを追加して修正
  • 不要になった detail::ssl_new() 等を削除 → Phase 3 で実施
  • make test_split 通過

フェーズ 3: SSLServer の移行

  • SSLServer が抽象化 API を使用
    • SSLServer::process_and_close_socket()tls_create_session(), tls_accept_nonblocking() 等で移行
    • process_server_socket_ssl()tls_session_t を受け取るように変更
    • SSLClient::shutdown_ssl_impl()tls_shutdown(), tls_free_session() で移行
  • サーバー証明書の設定が動作
  • クライアント証明書の検証が動作 (オプション)
  • 不要になった detail::* 関数を削除
    • detail::ssl_new() 削除
    • detail::ssl_delete() 削除
    • detail::ssl_connect_or_accept_nonblocking() 削除
    • detail::is_ssl_peer_could_be_closed() 削除
    • detail::load_system_certs_on_windows() 削除(tls_load_system_certs() に統合済み)
    • detail::load_system_certs_on_macos() および関連ヘルパー削除(tls_load_system_certs() に統合済み)
  • make test_split 通過

フェーズ 4: 残りの detail ヘルパーの削除とクリーンアップ

  • detail::is_ssl_peer_could_be_closed() が削除または置き換え済み → tls_is_peer_closed() で置き換え後削除
  • detail::load_system_certs_on_windows()tls_load_system_certs() 内に統合済み → 削除完了
  • detail::load_system_certs_on_macos()tls_load_system_certs() 内に統合済み → 削除完了
  • 未使用の SSL 関連 detail::* 関数がない
  • コンパイル警告なし
  • make test_split 通過

フェーズ 5: ドキュメントの更新

  • README.md が更新されている (必要であれば)

フェーズ 6: 代替バックエンド (将来)

  • mbedTLS または wolfSSL バックエンドの実装
  • バックエンド固有の API が提供されている
  • CI で全バックエンドをテスト