Python アプリから Fiddler を使用して HTTPS トラフィックを収集する

Fiddler を使用して暗号化された HTTPS Web トラフィックを Python でキャプチャするのは困難な場合があります。Python では、オペレーティング システムの証明書ストアではなく、独自の信頼された証明書ストアが使用されるためです。 さらに、既定では、Python は特定のシナリオではプロキシを使用しません。 この記事では、さまざまなシナリオで Fiddler for Python アプリを使用して SSL トラフィックをキャプチャする方法について説明します。

ADAL for Python

Fiddler を使用して、Azure Active Directory 認証ライブラリ (ADAL) を統合する Python アプリで HTTPS トラフィックをキャプチャすると、SSL エラー メッセージが表示されることがあります。 この問題は、Python が Fiddler 証明書を信頼していないために発生します。 この問題を回避するには、2 つの方法のいずれかを使用できます。

SSL 検証を無効にすると、セキュリティ上のリスクが伴います。 この方法は、トラブルシューティングにのみ使用する必要があります。 運用環境では使用しないでください。

  • AuthenticationContext オブジェクトが初期化される前に、Python アプリの先頭に環境変数を設定します。

    import os
    ...
    os.environ["ADAL_PYTHON_SSL_NO_VERIFY"] = "1"
    
  • verify_ssl=False フラグを AuthenticationContext メソッドに渡します。

    context = adal.AuthenticationContext(authority, verify_ssl=False)
    

Python 用 MSAL

Python 用 Microsoft Authentication Library (MSAL) を使用する場合は、次のように SSL 検証を無効にすることができます。

app = msal.PublicClientApplication( client_id=appId, authority="https://login.microsoftonline.com/" + tenantId, verify=False )

Python Requests モジュール

既定では、Requests モジュールではプロキシは使用されません。 次の例に従って、要求が Fiddler プロキシを通過するように強制する必要があります。

import requests

…
access_token = token.get('accessToken')
endpoint = "api_endpoint"
headers = {"Authorization": "Bearer " + access_token}
json_output = requests.get(
    endpoint,
    headers=headers,
    proxies={"http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"},
    verify=False
).json()

Azure Active Directory SDK for Python (GraphRbacManagementClient)

次の例は、SSL 検証を無効にする方法を示しています。

from azure.graphrbac import GraphRbacManagementClient
from azure.common.credentials import UserPassCredentials

credentials = UserPassCredentials(
      <username>,    # Your user name
      <password>,    # Your password
      resource=”https://graph.windows.net”,
      verify=False
)
tenant_id = <tenant name or tenant id>
graphrbac_client = GraphRbacManagementClient(credentials, tenant_id)
graphrbac_client.config.connection.verify=False
res = graphrbac_client.users.get(<UPN or ObjectID>)
print(res.display_name)

サードパーティの情報に関する免責事項

この記事で説明するサード パーティ製品は、Microsoft に依存しない企業によって製造されています。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。