【Tips】cert9.dbのせいでDocker上のPuppeteerをmitmproxy経由の通信でハマっていた件

プログラミング
スポンサーリンク

キジ(@kiji)です。
タイトルにある通り、Docker上で動かすPuppeteerアプリをmitmproxyを経由させて通信させるときに、ハマったため、メモとして残します。

構造は、以下のようになります。



症状

mitmproxyは起動できているのに、Puppeteerからの接続がタイムアウトすることでした。

mitmproxyは『setup.sh』などのスクリプトファイルで起動から、必要な証明書のダウンロード、設定をするようにしていました。

# mimdump実行
$ mitmdump > /dev/null 2>&1 &

# certファイルのダウンロード
curl -x 127.0.0.1:8080 'http://mitm.it/cert/pem' > ${file_path}

# certファイルを設定
$ update-ca-certificates


# chromiumへ証明書をインストール
for db in $(find ~/-name "cert9.db")
do
    dbname =`dirname ${db}`
    certutil -A -n "mitmproxy" -t "TCu,Cu,Tu" -i ${file_path} -d sql:${dbname}
done

原因

原因は『cert9.db』が見つからないことでした。これは、Chromiumなどのブラウザが起動した際に作られるファイルでした。

しかし、Dockerで初回起動でそのようなことをしているはずもなく、Chromiumに証明書がインストールされずにいました。

対処

スクレイピング対象へアクセスできることのテストコードを書き、アプリを起動する前に、テストコードを実行することで対応しました。
具体的には、Docckerfileを以下のようにしています。

FROM node

# 必要なライブラリなどのinstall

# テストの実行
# このテストのときに、cert9.dbが作られるようなテストコードを実行する
npm run test

# アプリの起動
npm run start

コメント

タイトルとURLをコピーしました