Box CLIの通信をキャプチャーしてみる

Box CLIの通信をキャプチャーしてみる

Box CLIの通信をキャプチャーしてみる

Box CLIでコマンドを叩いた際に発生する通信の中身が見たい時、FiddlerのようなHTTPプロキシとして動作する通信デバッグ系のアプリを経由させることによってリクエスト・レスポンスの内容が確認できます。本稿では、設定手順につき記載します。

前提

以下の環境で動かしてます

  • Box CLI: ver 2.6.0(2.xであれば、きっとこちらの手順でいけると思います)
  • Fiddler: v5.0.20204.45441
  • OS: Windows 10(Mac用のコマンドもちょいちょい記載してますが、未検証です)

Fiddler側の設定

Fiddlerを起動して以下の操作を行います。

  1. [Tools] > [Options] と遷移し [Options] ダイアログを開く
  1. [HTTPS]のタブを開き、[Capture HTTPS CONNECTs] と [Decrypt HTTP traffic]のチェックを有効化する
  2. [Actions]をクリックし、[Export Root Certificate to Desktop]を選択する(これによって作成されるFiddlerのルート証明書「FiddlerRoot.cer」は後述の手順で使用します)
  3. [Connections]タブを開き、[Fiddler listens on port:]に記載されているポート番号を控えておく(デフォはおそらく8888)

以上で、Fiddler側の設定は完了です。

Box CLI側の設定

Box CLI側でプロキシを設定します。GitHubのリリースノートによると、Box CLI ver2.6.0からプロキシ対応が導入されたため、こちら以降のバージョンをご利用の場合は、以下のコマンドから使用するプロキシサーバーを指定できます。

box configure:settings --proxy-url=https://your_proxy_server:proxy_port

今回の例では、ローカルホスト(127.0.0.1)で起動しているFiddler(↑の手順#4のポート番号でListen中)をプロキシとして指定するので、以下のように指定します:

box configure:settings --proxy-url=http://127.0.0.1:8888

ちなみに、以下のコマンドでプロキシのオン・オフが切り替えられます(上の行がオフ、下の行がオン)

box configure:settings --no-enable-proxy
box configure:settings --enable-proxy

なお、Box CLIのバージョンが古い場合は、Windowsでは以下のコマンドで環境変数を設定することで、プロキシ設定を行えます:

Windows (CMD)
set https_proxy=http://127.0.0.1:8888

Windows (Powershell)
$env:https_proxy="http://127.0.0.1:8888"

Mac
export https_proxy=http://127.0.0.1:8888

ここまで設定すると、Box CLIの通信をFiddler経由で行えるようになります。が、この状態でBox CLIのコマンドを叩くと、きっと以下のエラーになります。

C:\Users\user>box users:get me
unable to verify the first certificate

証明書エラーですね。そこで、次の手順が必要になります。

Fiddlerの証明書を信頼する

FiddlerでHTTPS通信を復号するにあたり、Fiddlerのルート証明書を信頼する必要があります。Box CLIはNode.jsをベースにしているため、NODE_EXTRA_CA_CERTSという環境変数を指定することで信頼するルート証明書を追加できるようです。

なお、NODE_EXTRA_CA_CERTS​には、プロキシの認証局 (CA) 証明書 (pem 形式) のファイルの場所を設定する必要があるようで、以下のコマンドで↑の手順#3で作成したFiddlerRoot.cerをpemへと変換します。

openssl x509 -inform der -in FiddlerRoot.cer -out FiddlerRoot.pem

※WindowsにはOpenSSLが標準インストールされてないため、未インストールの場合はインストールが必要になります。こちらのサイトなどが参考になると思います。

その後、以下のコマンドでpemの保存場所をNODE_EXTRA_CA_CERTSにセットします

Windows
set NODE_EXTRA_CA_CERTS=C:\path\to\FiddlerRoot.pem
Windows (Powershell)
$env:NODE_EXTRA_CA_CERTS=C:\path\to\FiddlerRoot.pem
Mac
export NODE_EXTRA_CA_CERTS=/path/to/FiddlerRoot.pem

なお、WindowsのSETコマンドで指定した環境変数はそのセッションのみ有効となるため、コマンドプロンプトを別のウィンドウで開く際は再度設定が必要になります。設定を保持する場合は、以下のように環境変数を追加することで可能となります。

Box CLIをFiddler経由で実行する

それでは、Box CLIでコマンドを叩いてみます。

C:\Users\user> box users:get me
Type: user
ID: '12345678'
Name: CLITest
Login: AutomationUser_123456_abcdefg@boxdevedition.com
Created At: '2018-08-13T20:26:19-07:00'
Modified At: '2020-03-11T01:15:34-07:00'
Language: en
Timezone: Asia/Tokyo
Space Amount: 10737418240
Space Used: 0
Max Upload Size: 16106127360
Status: active
Job Title: ''
Phone: ''
Address: ''
Avatar URL: 'https://app.box.com/api/avatar/large/12345678'
Notification Email: []

Fiddlerでリクエスト・レスポンスの中身が見えていればOKです。これで通信のデバッグができますね!

参考文献