Squid で SSL Bump なプロキシサーバを構築する

結論

細かく書いている時間がないので、以下は手順だけとさせてください*1

なお、SSL Bump は MITM(中間者攻撃)とほぼ同等なロジックのため、(不)特定多数のユーザが使う場合には注意が必要です。

前提

CentOS 7 です。

手順

CentOS 7 の場合は Squid のライブラリは /usr/lib64/squid にあります。

1. 証明書のキャッシュディレクトリを作る

ssl_db は私が勝手に命名したディレクトリ名です。任意の名前で構いません。

$ sudo /usr/lib64/squid/ssl_crtd -c -s /path/to/ssl_db
$ sudo chown squid:squid -R /path/to/ssl_db

2. 証明書のファイルと秘密鍵のファイルを作成する

Chrome 対策のために CN だけでなく SAN (Subject Alternative Name) を付与するのがポイントです。一部のサイトで -extensions SAN というオプションをつけるように書いてありますが、これをつけると Firefox で「この証明書は認証局の証明書ではないため、認証局の一覧には追加できません。」と怒られてルート証明書として読み込めませんでした。

$ openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -extensions v3_ca -keyout ここに秘密鍵ファイルのパス -out ここに証明書ファイルのパス -subj "/C=JP/ST=TO-DO-FUKEN/L=SHI-KU-CHO-SON/O=KAISHA-MEI/CN=YOUR.HOST.com" -config <(cat /etc/pki/tls/openssl.cnf <(printf "[SAN]\nsubjectAltName='DNS:YOUR.HOST.com'"))

3. squid.conf に以下の部分を追加する

既存の部分と重複する場合は既存の部分をコメントアウト(あるいは削除)してください。

http_port 31084 ssl-bump \
  cert=ここに証明書ファイルのパス \
  key=ここに秘密鍵ファイルのパス \
  generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all

# 以下の部分を明示的に指定しないとエラーが出てしまった
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /path/to/ssl_db -M 4MB

4. Squid を再起動する

設定が誤っていなければ Squid は正常に再起動するはずです。

$ sudo systemctl restart squid

5. クライアント側で証明書をインストールする

「2.」で作った証明書ファイルを各クライアント(Webブラウザ)にインストールします。OS や Webブラウザ ごとに方法が異なります。いずれにしても「常に信頼する」のような設定をする必要があります。

参考

*1:公式ドキュメントなどを適宜参照する必要があるかと思います

Powered by はてなブログ