3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Ruby, Python】開発時に通信傍受プロキシを設置した時、ルート証明書を与えて、ハンドシェイクエラーを回避する

Posted at

TL;DR

各言語での設定

  • Ruby
    • ENV['SSL_CERT_FILE'] = PATH_TO_SSL_CERT_FILE
  • Python
    • import os; os.environ['CURL_CA_BUNDLE'] = PATH_TO_SSL_CERT_FILE

この文書は誰向け?

サーバサイドの開発者で、通信内容を覗きたい人

暗号化されていないhttpでの通信であれば、後ほど紹介するcharles等をプロキシサーバにするだけで内容を傍受できます。しかし、SSL/TLSで暗号化されているhttpsの通信は、プロキシの設定だけだと「ハンドシェイクに失敗した」といわれて傍受することができません。

実際に開発を行う上で通信を傍受したいケースは、次のようなものが挙げられます。

サーバサイドの人の例:

他のAPIサーバへアクセスしに行く際、正しいパラメータでリクエストしているはずだがレスポンスが期待するものと一致しない。原因の切り分けのために送受信している内容を傍受したいがhttpsでアクセスしているため、SSL/TLSで暗号化されていて読めない…

→この方法で読めるようになります!

フロントエンドの人の例:

仕様書に沿ったリクエストを投げているのに、いっこうに期待するレスポンスをサーバが返してこない。以下同文。

→この文書では扱いませんが、以下で紹介されている方法で傍受することができます。

どうやって覗くの?

この辺を使ってください。私はcharles大好き人間なので課金して使っています。今回はcharlesを使いますが、mitm-pythonの場合もほぼ同様です。

Charles

予めcharlesを起動し、Help -> SSL Proxying -> Save Charles Root Certificate でルート証明書を保存しておきます。mith-pythonの場合は ~/.mitmproxy/mitmproxy-ca-cert.pem にあるものを使います。

Save Charles Root Certificate

各言語での設定

基本的には環境変数で指定された値を与えてやればOKです。

Ruby

http_proxy = 'http://THE_IP_OF_MITM_PROXY:PORT' # 変更する
ENV['HTTP_PROXY'] = http_proxy
ENV['http_proxy'] = http_proxy
ENV['HTTPS_PROXY'] = http_proxy
ENV['https_proxy'] = http_proxy
ENV['SSL_CERT_FILE'] = './charles-ssl-proxying-certificate.pem' # 必要に応じて変更する

Python

import os

http_proxy = 'http://THE_IP_OF_MITM_PROXY:PORT' # 変更する
os.environ['HTTP_PROXY'] = http_proxy
os.environ['http_proxy'] = http_proxy
os.environ['HTTPS_PROXY'] = http_proxy
os.environ['https_proxy'] = http_proxy
os.environ['CURL_CA_BUNDLE'] = './charles-ssl-proxying-certificate.pem' # 必要に応じて変更する

あとはそれぞれスクリプトを走らせれば、通信内容を傍受できます!


本記事の内容が少しでも参考になれば幸いです。「いいね」をいただけると筆者の励みになります :pray:

また、 @dogwood008 からフォローしていただけると、最新の投稿記事をお知らせできます。

ブログ ( http://blog.dogwood008.com/ )もやっておりますので、よろしければ是非ご覧ください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?