Windows XP の IE6 をどうしても TLSv1.2 対応させる必要があったので、squid を利用て TLSv1.0 → TLSv1.2 変換してみました。
自分で書いておいて何ですがこういうやりかたは全くお勧めできません。
† 基本的な動作原理は MITM 攻撃
TLS は通信が暗号化されているので、通常の方法では外部からプロトコルを変換することはできません。
今回は squid 側で TLS を一旦平文に戻て、squid が再び TLS をかける方式になります。
サーバー <=== TLS v1.2 ===> squid <=== TLS v1.0 ===> Windows XP / IE6
上記を見ると分かりますが、やり方がMITM(中間者攻撃 )なんですよね。
squid はオリジナルのサーバーの秘密鍵を当然ながら保持していないので、証明書を自分が生成した証明書に差し替えます。
従って、クライアントでは証明書が信頼されていないという警告が出ることになります。
† セットアップ
CentOS 7 だと比較的簡単にセットアップできます
# squid のインストールyum install squid# CA証明書の生成cd /etc/squidmkdir ssl_certchown squid:squid ssl_certchmod 700 ssl_certcd ssl_certopenssl req -new -newkey rsa:2048 -subj /CN="ssl-bump CA"/O="ssl-bump CA" -sha256 -days 3650 -extensions v3_ca -nodes -x509 -keyout myCA.pem -out myCA.pem# 証明書を生成するためのディレクトリを初期化rm -rf /var/lib/ssl_db/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_dbchown squid:squid -R /var/lib/ssl_db
設定ファイルはこんな感じでしょうか。
/etc/squid/squid.conf
acl localnet src 192.168.0.0/16acl CONNECT method CONNECThttp_access allow localnethttp_access allow localhosthttp_access deny allhttp_port 3128 ssl-bump cert=/etc/squid/ssl_cert/myCA.pem \ key=/etc/squid/ssl_cert/myCA.pem \ generate-host-certificates=on \ dynamic_cert_mem_cache_size=4MB \ options=ALLacl step1 at_step SslBump1ssl_bump peek step1ssl_bump bump allsslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/ssl_db -M 4MBsslproxy_cert_error allow allsslproxy_flags DONT_VERIFY_PEERforwarded_for offrequest_header_access Referer deny allrequest_header_access X-Forwarded-For deny allrequest_header_access Via deny allrequest_header_access Cache-Control deny all
最後に firewalld の設定を変えて、デーモンを起動します。
firewall-cmd --add-service=squidfirewall-cmd --runtime-to-permanentsystemctl start squidsystemctl enable squid
あとは Windows のプロキシ設定でこのマシンを指定すれば OK。
† 動作チェック
以下のようなサイトを利用してみるとチェックが楽です。
† 参考