dogwood008の開発メモ!

最近のマイブームは機械学習, Ruby on Rails。中でも機械学習を使った金融商品の自動取引に興味があります。

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

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の場合もほぼ同様です。

f:id:dogwood008:20180212142311p:plain

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

f:id:dogwood008:20180212142042p:plain

各言語での設定

基本的には環境変数で指定された値を与えてやれば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' # 必要に応じて変更する

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

180208 トレンドニュース

無料でアクセス解析の基本と応用をマスターできるGoogle公式講座&資格「Google アナリティクス個人認定資格(GAIQ)理解度テスト」に挑戦してみた - GIGAZINE

ええな gigazine.net

pandasで任意の位置の値を取得・変更するat, iat, loc, iloc | Python / note.nkmk.me

“DataFrame.get_value()、DataFrame.ix[]もあるが、どちらも最新のバージョンでは非推奨(Deprecated)になっている”知らなかった…勉強になる note.nkmk.me

180131 トレンドニュース

Amazon Lex* | Amazon Web Services ブログ

さっきのの一覧 https://aws.amazon.com/jp/blogs/news/category/artificial-intelligence/amazon-lex/aws.amazon.com

Amazon Lex を使った Bot の作成 | Amazon Web Services ブログ

これ面白そうやん 面倒なNLPや学習をAWSに任せて、応答例の作成にフォーカスできるってことかな aws.amazon.com

AWS Deep Learning AMI に TensorFlow 1.5 と新しい Model Serving 機能が追加されました | Amazon Web Services ブログ

仕事が早い もうTF1.5が載ってる(RCだけど) aws.amazon.com

運用自動化、不都合な真実 // Speaker Deck

「それで結局アウトプットが良くなるのか」は大事な視点 speakerdeck.com

Google、オープンソース機械学習ライブラリの最新版「TensorFlow 1.5」を発表:使い勝手やモバイル対応、GPUサポートが向上 - @IT

Eager Execution、コード量減って書きやすくなるからええな www.atmarkit.co.jp