HTTPSで通信する色々なコマンドにMITMするためのパラメータの渡し方が微妙に違っていて毎回調べている気がするのでこっちに証明書ファイルとproxyのURLの渡し方をメモしていきます。
デバッグ用途で使う想定。
前準備
pemファイル作る
DER -> PEM
の変換
openssl x509 -inform der -in cert.crt -out cert.pem
proxy立てる
立てるだけ。ここでは127.0.0.1:8080
に立ってる想定で話をします。
Ruby
v2.6 net/https
でためした
$ SSL_CERT_FILE=./cert.pem HTTP_PROXY="http://127.0.0.1:8080"
gcloudコマンド
Google Cloud SDK 269.0.0
でためした
gcloudコマンドはHTTP_PROXYとHTTPS_PROXY環境変数を受け付けてそう。
configで証明書指定するとうっかりunsetし忘れそうなので誰か環境変数でセットする方法しってたら教えて下さい。
$ gcloud config set core/custom_ca_certs_file ./cert.pem
$ HTTPS_PROXY="http://localhost:8080" gcloud foo bar
$ gcloud config unset core/custom_ca_certs_file
Node.js
v12.9.0
でためした
$ CUSTOM_CA_CERTS_FILE=./cert.pem HTTP_PROXY="http://localhost:8080" node ./main.js
kubectl
クライアント証明書による認証があるので、そのまま見るには設定ファイル( ~/.kube/config
等)から抜き出して2-3ステップ必要
kubectl proxy
でkubernetes自体のproxyを立てればクライアント<->kubernetesのproxy間は平文で通信するので見れるかなと思ったが、環境変数で渡しても何故か見れなかったのでproxyではなくwiresharkとかでループバックインタフェースを眺めるのが一番はやい。
ちなみにlocalhost以外のcluster相手だと kubectl
に証明書を渡す方法はわからなかったので以下のような感じで一旦検証自体をskipしてもらってproxy側にクライアント証明書食わせればproxyで見れることはわかった
$ HTTPS_PROXY=127.0.0.1:8080 kubectl --insecure-skip-tls-verify get pods