Squid 4.7 ssl bumpの設定
HTTPSの暗号化通信を可視化(復号)するため
Squid 4.7にssl bumpをインストールしたので作業メモ
ssl bumpの設定
予めconfigure時に「--enable-ssl-crtd --with-openssl」を指定する必要があります。
設定されてないからは以前書いた記事を参考にしてみてください。
このあたりを参考にした。 https://wiki.squid-cache.org/Features/DynamicSslCert
root@kali:/usr/local/squid# mkdir -p /etc/squid/ssl_cert root@kali:/usr/local/squid# chmod 700 /etc/squid/ssl_cert root@kali:/usr/local/squid# cd /etc/squid/ssl_cert root@kali:/etc/squid/ssl_cert# openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout server.key -out server.crt -subj "/CN=*サーバのIPアドレス*" -days 3650 root@kali:/etc/squid/ssl_cert# openssl pkcs12 -export -inkey server.key -in server.crt -out server.p12
ここで作成したserver.p12をMacでKeyChainにインポートして常に信頼する設定にした。
iPhoneへの証明書のインストールはMacからAirDrop経由で行った(Windowsユーザはメールの添付等を利用すればよい)。
続いてsquid.confの設定
http_port 3128 #以下に書き換え http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/server.crt key=/etc/squid/ssl_cert/server.key
設定後squidを再起動するとエラーが出る。
2019/07/06 12:49:58| WARNING: /usr/local/squid/libexec/security_file_certgen -s /usr/local/squid/var/cache/squid/ssl_db -M 4MB #Hlpr1 exited 2019/07/06 12:49:58| Too few /usr/local/squid/libexec/security_file_certgen -s /usr/local/squid/var/cache/squid/ssl_db -M 4MB processes are running (need 1/32) 2019/07/06 12:49:58| Closing HTTP(S) port [::]:3128 2019/07/06 12:49:58| storeDirWriteCleanLogs: Starting... 2019/07/06 12:49:58| Finished. Wrote 0 entries. 2019/07/06 12:49:58| Took 0.00 seconds ( 0.00 entries/sec). 2019/07/06 12:49:58| FATAL: The /usr/local/squid/libexec/security_file_certgen -s /usr/local/squid/var/cache/squid/ssl_db -M 4MB helpers are crashing too rapidly, need help! 2019/07/06 12:49:58| Squid Cache (Version 4.7): Terminated abnormally. 2019/07/06 12:49:58| Removing PID file (/usr/local/squid/var/run/squid.pid)
FATALの行のコマンドを手動で実行してみた。
/usr/local/squid/libexec/security_file_certgen -s /usr/local/squid/var/cache/squid/ssl_db -M 4MB /usr/local/squid/libexec/security_file_certgen: Uninitialized SSL certificate database directory: /usr/local/squid/var/cache/squid/ssl_db. To initialize, run "security_file_certgen -c -s /usr/local/squid/var/cache/squid/ssl_db".
先に-cオプションつけて実行しろと言われた。
/usr/local/squid/libexec/security_file_certgen -c -s /usr/local/squid/var/cache/squid/ssl_db -M 4MB Initialization SSL db... Done
これで起動するようになった。
ssl bumpのアクション
以下リンクをみると、どうやら5種類あるようである。 Features/SslPeekAndSplice - Squid Web Proxy Wiki peek, splice, stare, bump, terminateだが、以下の表がありましたが、実際にやってみました。
アクション | ssl復号 | 証明書情報 |
---|---|---|
bump | ○ | ✗ |
stare | ○ | ○ |
peek | ○ | ○ |
splice | ✗ | ✗ |
terminate | ✗ | ✗ |
※terminateは接続遮断用のようです。
# bump "2019/07/06 13:12:08.237" 127.0.0.1 120 - 0 443 - "CONNECT www.google.com:443 HTTP/1.1" 200 "-" "curl/7.64.0" NONE:HIER_NONE "-" "-" "2019/07/06 13:12:08.436" 127.0.0.1 78 172.217.25.100 13562 443 text/html "GET https://www.google.com/ HTTP/1.1" 200 "-" "curl/7.64.0" TCP_MISS:HIER_DIRECT "-" "-" # stare "2019/07/06 13:15:28.701" 127.0.0.1 120 172.217.25.100 0 443 - "CONNECT www.google.com:443 HTTP/1.1" 200 "-" "curl/7.64.0" NONE:HIER_DIRECT "/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com" "/C=US/O=Google Trust Services/CN=Google Internet Authority G3" "2019/07/06 13:15:28.828" 127.0.0.1 78 172.217.25.100 13573 443 text/html "GET https://www.google.com/ HTTP/1.1" 200 "-" "curl/7.64.0" TCP_MISS:HIER_DIRECT "/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com" "/C=US/O=Google Trust Services/CN=Google Internet Authority G3" # peek "2019/07/06 13:18:28.284" 127.0.0.1 120 172.217.26.4 0 443 - "CONNECT www.google.com:443 HTTP/1.1" 200 "-" "curl/7.64.0" NONE:HIER_DIRECT "/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com" "/C=US/O=Google Trust Services/CN=Google Internet Authority G3" "2019/07/06 13:18:28.417" 127.0.0.1 78 172.217.26.4 13560 443 text/html "GET https://www.google.com/ HTTP/1.1" 200 "-" "curl/7.64.0" TCP_MISS:HIER_DIRECT "/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com" "/C=US/O=Google Trust Services/CN=Google Internet Authority G3" #splice "2019/07/06 13:20:19.527" 127.0.0.1 1003 172.217.26.36 16529 443 - "CONNECT www.google.com:443 HTTP/1.1" 200 "-" "curl/7.64.0" TCP_TUNNEL:HIER_DIRECT "-" "-" #terminate "2019/07/06 13:20:32.914" 127.0.0.1 120 - 0 443 - "CONNECT www.google.com:443 HTTP/1.1" 0 "-" "curl/7.64.0" "NONE_ABORTED:HIER_NONE" "-" "-"
細かく設定するとハンドシェイクのどのタイミングでどのアクションを使うという設定もできるようでした。
例えば特定の条件にマッチしたらterminateで遮断であったりspliceで復号をやめる等できそうですね。
私はロギングしたいだけなので全てのタイミングでstareを使うことにした。
squid.confに以下を設定した。
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/myCA.pem ssl_bump stare all