mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-01-19 04:52:08 +00:00
3.9 KiB
3.9 KiB
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を宣言エリアに追加ErrorCodeenum を定義TlsError構造体を定義tls_ctx_t,tls_session_t型を定義- 関数宣言を追加
- 実装エリアに OpenSSL バックエンド実装を追加
- 既存コードは変更していない(新 API 追加のみ)
make test_split通過
フェーズ 2: SSLClient と SSLSocketStream の移行
SSLSocketStreamがtls_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 で全バックエンドをテスト