KUSONEKOの見る世界

Privoxy が HTTPS Inspection に対応したので試してみた

以前の記事でPrivoxyをインストールしましたが、
最近調べた所、その次のバージョンから試験的にHTTPS Inspectionに対応していました。

HTTPS Inspectionとは、ファイアウォールやプロキシサーバが、クライアントとサーバの間に入り、一旦HTTPSの暗号化を解除し、通信の中身を検査する機能のことです。
これにより、セキュリティ上のリスクを排除したり、広告のダウンロードをブロックことができます。

以前のPrivoxyはHTTPS通信の中身を見ることはせず、アクセス先のサーバで判断してブロックしてきました。
しかし、今回からHTTPSの中身を確認しブロックが可能になります。

今回、Privoxy の HTTPS Inspection機能をテストしてみましたので、その結果を記載します。

インストール

./configureで、--with-mbedtls または、--with-openssl を付けることで、HTTPS Inspectionに対応します。
私は、OpenSSLを使っているため、--with-opensslを付けました。

その他の詳細は、以前の記事をご覧ください。

wget https://www.privoxy.org/sf-download-mirror/Sources/3.0.32%20%28stable%29/privoxy-3.0.32-stable-src.tar.gz
tar -xvf privoxy-3.0.32-stable-src.tar.gz
cd privoxy-3.0.32-stable
autoheader
autoconf
./configure --disable-toggle --disable-editor --disable-force --with-openssl
make
make install USER=privoxy GROUP=privoxy

設定

認証局準備

 HTTPS Inspectionは、HTTPSの暗号解除を行いますが、クライアントに渡す時に再度暗号化します。
その時に、サーバ毎に暗号鍵とサーバ証明書を生成する必要があり、証明書を発行する認証局(CA)を準備する必要があります。

今回は、サーバ側の負荷が小さいとされるECDSA証明書を作成します。

cd /usr/local/etc/privoxy/
mkdir CA
chown privoxy. CA
cd CA
openssl ecparam -out cakey.pem -name secp384r1 -genkey
openssl req -new -x509 -key cakey.pem -sha384 -days 3650 -out cacert.crt -extensions v3_ca
(地域や組織名の指定はお好きなように)
chown privoxy. *

信頼するルート証明書準備

この証明書は、PrivoxyがHTTPSサイトにアクセスする際に、証明書の検証に使用するルート証明書群です。

cd /usr/local/etc/privoxy/CA
wget https://curl.se/ca/cacert.pem
mv cacert.pem trustedCAs.pem

生成する証明書を格納するディレクトリ作成

サーバ毎に暗号鍵とサーバ証明書を生成しますが、それを格納するディレクトリです。
現在のPrivoxyには、不要になった証明書の削除などの処理は無く、生成され続けるので、/var内が良いかもしれませんが、今回はテストなので以下とします。

cd /usr/local/etc/privoxy
mkdir certs
chown privoxy. certs

設定変更 

configファイルの編集や280blockerは、以前の記事と同じです。
以下では、HTTPS Inspection関連の設定を記載します。

cd /usr/local/etc/privoxy/
vi config

#ca-directory /usr/local/etc/privoxy/CA
↓
ca-directory /usr/local/etc/privoxy/CA

#certificate-directory /usr/local/var/privoxy/certs
↓
certificate-directory /usr/local/etc/privoxy/certs

HTTPS Inspectionを行うURLを指定する、+https-inspectionをルールに追加します。
今回はすべてのURLを対象とするため、以下に追加します。

vi match-all.action

{ \
+change-x-forwarded-for{block} \
+client-header-tagger{css-requests} \
+client-header-tagger{image-requests} \
+client-header-tagger{range-requests} \
+hide-from-header{block} \
+set-image-blocker{pattern} \
+https-inspection \      ←追加
}

PCに作成したCA証明書をインストール

作成したCA証明書をクライアントPCにインストールします。

cacert.crtをWinSCPなどでPCにダウンロードし、Chromeであればインターネットオプションの証明書に、FirefoxならFirefoxのオプションでインポートします。
詳細は他サイトでご確認ください。

動作確認

Firefoxで価格.comにアクセスし、Privoxy無し/有り/有り+HTTPS Inspectionで差分を確認しました。

Privoxy無し

Privoxy無しのアクセスでは、広告が表示されています。

Privoxy有り

HTTPS Inspection無しのPrivoxyでも広告を除去できています。

Privoxy有り 価格.com

Privoxy有り+HTTPS Inspection

HTTPS Inspection有りのPrivoxyでは、更にfacebookのいいね!ボタンが消えています。
それ以外は、HTTPS Inspection無しと見た目は変わりません。

Privoxy有り+HTTPS Inspection 価格.com

ログを確認すると、HTTPS Inspection無しではサーバレベルでのブロックが、HTTPS Inspection有りではURLレベルでのブロックが出来ており、より多くブロックができるようになっています。

■HTTPS Inspection無しのログ
Crunch: Blocked: cdn.bigmining.com:443
Crunch: Blocked: asia.creativecdn.com:443
Crunch: Blocked: tg.socdm.com:443
Crunch: Blocked: ads.rubiconproject.com:443
Crunch: Blocked: securepubads.g.doubleclick.net:443
Crunch: Blocked: www.google-analytics.com:443
Crunch: Blocked: sync.im-apps.net:443
Crunch: Blocked: pubads.g.doubleclick.net:443
Crunch: Blocked: googleads.g.doubleclick.net:443
Crunch: Blocked: kakakucom.112.2o7.net:443
Crunch: Blocked: x.bidswitch.net:443
■HTTPS Inspection有りのログ
Crunch: Blocked: https://www.google.com/adsense/search/ads.js
Crunch: Blocked: https://www.google.com/adsense/search/ads.js
Crunch: Blocked: https://www.facebook.com/plugins/like.php?href=https%3A%2F%2Fkakaku.com%2Fpc%(略)
Crunch: Blocked: https://cdn.bigmining.com/js/k3c_bigmining.js
Crunch: Blocked: https://img1.kakaku.k-img.com/images/kaden/article/newlife/banner/64x48.png
Crunch: Blocked: https://tg.socdm.com/aux/idsync?proto=treasuredata_global
Crunch: Blocked: https://cdn.treasuredata.com/sdk/2.1/td.min.js
Crunch: Blocked: https://asia.creativecdn.com/tags?type=iframe&id=pr_Bk0nbSAtG0K3eOXvldrV&(略)
Crunch: Blocked: https://img1.kakaku.k-img.com/images/okurimono/lifeevent/birthday/2021/banner/64x48.png
Crunch: Blocked: https://ads.rubiconproject.com/prebid/12154_k_prod.js
Crunch: Blocked: https://www.google-analytics.com/analytics.js
Crunch: Blocked: https://sync.im-apps.net/imid/segment?token=dmJmXE6ihffGM09UZqwoBg&(略)
Crunch: Blocked: https://googleads.g.doubleclick.net/pagead/viewthroughconversion/1039335471(略)
Crunch: Blocked: https://pubads.g.doubleclick.net/activity;dc_iu=/116070306/k;k_Top_Category=pc;(略)
Crunch: Blocked: https://securepubads.g.doubleclick.net/tag/js/gpt.js
Crunch: Blocked: https://x.bidswitch.net/sync?ssp=dgarage
Crunch: Blocked: https://kakakucom.112.2o7.net/b/ss/kakakucomkakakucom/1/JS-1.6.1/s65816534434401(略)

ただ、HTTPS Inspectionを有効にすると、かなり重くなります。
リンク先が多いサイトでは、何分待っても表示されなかったりします。

YouTubeでは、広告やバナーが表示されませんが、開始6秒で再生が止まってしまいました。

最後に

HTTPS Inspectionは、重い割に効果が少なく、表示されないサイトもあるため、実用的ではありませんでした。

まだ試験的な機能なので、今後改善されていくかもしれません。

Dwijayanto2022年2月3日 20:13

Do you experiencing high cpu usage while using privoxy with https inspection?
I set up my browser proxy to use privoxy with https inspection enabled, and my cpu fan is running wild and cpu usage is higher than browser + ublock origin extension. With cpu usage that high I don't think I will set it up on my raspberry pi, let alone vps.
Do you have any solution? And thanks to write this tutorial, it really helped me.

KUSONEKO2022年2月3日 22:35

コメントありがとうございます。

CPU使用率は、アクセスするサイトにもよりますが、100%になることもあります。
解決策は今のところ無いと思います。
ちなみに、私が使っているCPUは、Celeron N3150です。

今回3.0.33で、久しぶりに使ってみましたが、割と使えると感じました。