SSL Bump を設定しようとして、こんな壁にぶつかっていませんか?
本記事では、筆者が実際に検証し、”確実に動作した手順のみ”をまとめています。
OpenSSL での証明書作成、Squid.conf の記述、SSL Bump の有効化、そして動作確認まで順番に進めるだけで SSL Bump を再現できるよう構成しています。
本記事が読者のお役に立てることを願っています。
はじめに
本記事は、
「Squidの基本設定はできるが、SSL通信の仕組みや証明書周りに自信がない初~中級者」
を対象にしています。
このような方が「確実にSSL Bumpを動かせるようになる」ことがゴールです。
SSL Bumpとは?
SSL Bumpは一言で言えばクライアント端末のweb通信を復号して中身を見る機能です。
通常、Squidは「クライアントとwebサーバー間」の通信は暗号化されているため、通信の中身を見ることはできません。
SSL通信の復号が必要な理由
いくつか理由はありますが、必要な理由(用途)として以下が考えられます。
SSL Bumpの動作フロー
まずは以下イラストをご確認ください。
SSL Bumpは一言で言うと
「クライアント端末とsquid間」、「squidとwebサーバー間」で2つTLSのセッションを張ります。
Squidはクライアント側がwebアクセスを試みた際に、偽のwebサーバーとしての振る舞いを行います。
そして実際に暗号化された通信を復号して、再度、squid側で暗号化した通信を本物のwebサーバーと行います。

今回の検証環境
ネットワーク構成図
簡単な構成図になりますが、今回は2台のPCを使い「SSl Bump」の検証を行っていきます。

使用ソフト(Squid / OpenSSL / OS)
SquidとOpenSSLのバージョンは以下の通りです。
| ソフト名 | バージョン |
|---|---|
| OpenSSL | OpenSSL 3.6.0 1 Oct 2025 (Library: OpenSSL 3.6.0 1 Oct 2025) |
| Squid | Version 4.14 |
使用したOSのバージョンは以下の通りです。
| 役割 | OSエディション | バージョン |
|---|---|---|
| プロキシサーバー | Windows Server 2022 Standard Evaluation | バージョン 21H2 (OS ビルド 20348.587) |
| プロキシクライアント | Windows 11 Enterprise Evaluation | バージョン 24H2 (OS ビルド 26100.7171) |
SSL Bumpに必要な自己証明書の準備
Open SSLで秘密鍵の作成
- step.1Squidフォルダー直下に「ssl_cert」フォルダーを新規で作成する

- step.2OpenSSLにてCAの秘密鍵を作成する
OpenSSLの以下コマンドを入力します
openssl genrsa -out myCA.key 4096
ファイルを作成する前にカレントディレクトリを分かりやすい場所に移しておくとファイルが生成されたことを確認しやすい
以下はデスクトップへカレントディレクトリを移した例です
C:\Users\Administrator>cd Desktop C:\Users\Administrator\Desktop> - step.3CAの秘密鍵が作成されていることを確認する
実際に作成されたファイルは以下のようなアイコンをしています

- step.4「ssl_cert」フォルダーにCAの秘密鍵を格納する
本手順と同じようにデスクトップに作成している場合は、ドラッグ&ドロップで入れてください

Open SSLでCA証明書を作成
- step.1OpenSSLでCA証明書を作成する
openssl req -new -x509 -days 3650 -key myCA.key -out myCA.crt
作成途中でいくつか質問があります。

今回は検証になりますので仮で入力していきます。Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []:Shinjuku Organization Name (eg, company) [Internet Widgits Pty Ltd]:Proxy-test Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:Proxy-CA-Test Email Address []: - step.2CA証明書が生成されていることを確認する
CA証明書の生成が問題なく行われると以下の通りファイルが作成されます。

- step.3「ssl_cert」フォルダーにCA証明書を格納する
先ほどの手順同様、ドラッグ&ドロップで入れてください

証明書DBの作成
- step.1「ssl_db」フォルダーを作成する
コマンドプロンプトで以下コマンドを入力する
"C:\Squid\lib\squid\security_file_certgen.exe" -c -s "C:\Squid\ssl_db" -M 4MB
コマンド入力が成功したポイントは「Done」と表示されるか否かになります
Initialization SSL db... Done C:\Users\Administrator\Desktop>もし、以下の通りエラーが表示される場合は文末の「よくあるエラーと対処法」を確認してみてください。

- step.2「ssl_db」フォルダーが作成されていることを確認する

「ssl_db」フォルダー内にも以下の通りフォルダ、及びファイルが生成されています

「cert」フォルダー内に動的に生成された証明書がストックされていきます
▼フォルダー作成直後

▼SSL Bumpで通信を何度か発生させた後

SquidでSSL Bumpを有効化する
- step.1Squid.confを開く
- step.2もともとのhttp_portを無効化する
次手順で「SSL Bump」用のhttp_portを作成するためになります。
「#」を先頭につけてコメントアウトします
追記箇所は以下の通り(緑色でハイライトした箇所)
#http_portの無効化 # Squid normally listens to port 3128 #http_port 3128 - step.3SSL Bump用のhttp_portを新規で定義する

コマンドは以下の通りになります
# SSL Bump 用のポート定義 http_port 3128 ssl-bump \ cert=C:\Squid\ssl_cert\myCA.crt \ key=C:\Squid\ssl_cert\myCA.key \ generate-host-certificates=on dynamic_cert_mem_cache_size=4MBコマンドの補足になりますが、
- 「http_port 3128 ssl-bump」
プロキシ用のポートを新たに定義し、SSL Bumpの設定を有効化しています - 「cert=C:\Squid\ssl_cert\myCA.crt」
クライアント側に提示する自己証明書のフォルダーパスです - 「key=C:\Squid\ssl_cert\myCA.key」
Squidが動的な偽の証明書を作成するときに、この鍵で署名します - 「generate-host-certificates=on」
アクセスしたwebサイトごとの証明書を自動で作成する機能を有効化します - 「dynamic_cert_mem_cache_size=4MB」
生成した証明書をメモリ上にキャッシュする容量を指定しています(4MB)
「\」バックスラッシュで行継続できます
- 「http_port 3128 ssl-bump」
- step.4証明書生成プログラムとDBを指定する

コードは以下の通りです
# 動的証明書生成プログラムとDBの指定 sslcrtd_program C:\Squid\lib\squid\security_file_certgen.exe -s C:\Squid\ssl_db -M 4MB sslcrtd_children 5こちらも補足を入れます
- 「sslcrtd_program C:\Squid\lib\squid\security_file_certgen.exe -s」
「ssl_db」フォルダーを作成するときに使用した「証明書生成ツール」です - 「C:\Squid\ssl_db」
証明書生成ツールが使うDBを指定 - 「-M 4MB」
証明書生成ツールのプロセスのメモリ上限を指定 - 「sslcrtd_children 5」
証明書生成ツールのプロセスを最大5個まで並列で動かす指定
同時に複数サイトへアクセスしても詰まりにくくする役割です
- 「sslcrtd_program C:\Squid\lib\squid\security_file_certgen.exe -s」
- step.5SSL Bump用のACLを定義

コードは以下のとおりです
acl step1 at_step SslBump1補足になります
- 「acl step1 at_step SslBump1」
- 「acl step1 at_step SslBump1」
- step.6実際のSSL Bump動作指定

コードは以下のとおりです
ssl_bump peek step1 ssl_bump bump all最後の補足になります
- 「ssl_bump peek 」
完全に暗号化を解除せずに、ClientHelloだけを除くモード - 「step1」
先ほど定義した「SslBump1のタイミング」
どのSNI(どのサイトへ行きたいか)などの情報を読み取れるようになります - 「ssl_bump bump」
今回の目的の「SSLを復号して、中身を読めるようにする」モード - 「all」
対象サイトを指定(すべて)
- 「ssl_bump peek 」
- step.7Squid Terminalで構文チェックをします
構文チェックのコマンドは以下のとおりです
squid -k parse
追加したコマンドの行が「Processing」になっていればOKです
上記設定だけでは、まだSSL Bumpの設定は不十分になります。
この設定のままですとクライアント端末からwebサイトへアクセスした際に以下のようなエラーでアクセスできません。

理由は、squid側がアクセスしたときにexample.comから提示されたサーバー証明書を信頼していないからです。
そのため、squid側にWindowsの証明書ストアのように証明書ファイルを読み込ませる必要があります。
以下の通り手順を進めてください。
- step.1https://curl.se/docs/caextract.htmlへアクセスします
CA file revisions per date of appearance内の一番新しい日付をクリックします
- step.2pemファイルがダウンロードされたことを確認します

- step.3Squidフォルダー内に新規で「cert」フォルダーを作成します

- step.4先ほどダウンロードしたpemファイルを「cert」へ移します

- step.5ファイル名、およびファイル拡張子を「ca-bundle.crt」へ変更します

警告文が出ますが「はい」を選択します

- step.6アイコン、ファイル名の変化を確認します

- step.7Squid.confを編集します
SSL Bumpの設定箇所の一番下にコマンドを追加します追加コマンドは以下のとおりです
#Squidがインターネット側のサーバー証明書を検証する際に使うCA tls_outgoing_options cafile=C:\Squid\cert\ca-bundle.crt
- step.8Squid Terminalで構文チェックをします
構文チェックのコマンドは以下のとおりです
squid -k parse
追加したコマンドの行が「Processing」になっていればOKです
squid.confの設定例
上記でご紹介した手順とコメントアウトの内容が異なりますが、squid.confの設定例になります。
今回投入しているコマンドは緑色でハイライトしました。
#
# Recommended minimum configuration:
#
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
#検証用のALC定義を追加
acl deny_mysite_test_1 dstdomain .kuwamakurano98.com
#
# Recommended minimum Access Permission configuration:
#
#検証用のALCを適用
http_access deny deny_mysite_test_1
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
# ==== ここから SSL Bump 関連設定 ====
# もともとの http_port 3128 をコメントアウト
# Squid normally listens to port 3128
#http_port 3128
# SSL Bump 用のポート定義
http_port 3128 ssl-bump \
cert=C:/Squid/ssl_cert/myCA.crt \
key=C:/Squid/ssl_cert/myCA.key \
generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
# 動的証明書生成プログラムと DB の指定
sslcrtd_program C:/Squid/lib/squid/security_file_certgen.exe -s C:/Squid/ssl_db -M 4MB
sslcrtd_children 5
# SSL Bump のステップ用 ACL
acl step1 at_step SslBump1
# 1段階目でClientHelloを覗く(peek)、その後はbump = 復号
ssl_bump peek step1
ssl_bump bump all
tls_outgoing_options cafile=C:/Squid/cert/ca-bundle.crt
# ==== SSL Bump 設定ここまで ====
# Uncomment the line below to enable disk caching - path format is /cygdrive/<full path to cache folder>, i.e.
#cache_dir aufs /cygdrive/d/squid/cache 3000 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/cache/squid
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
dns_nameservers 8.8.8.8 208.67.222.222
max_filedescriptors 3200
# ブロック時は Squid 標準ページを表示(リダイレクトしない)
deny_info ERR_ACCESS_DENIED deny_mysite_test_1
#日本語用のエラーページを表示
error_directory C:/Squid/usr/share/squid/errors/ja

手順通りやってもうまく動作しない場合に、コピペ用としてご活用ください
WindowsにCA証明書をインポートする手順
試しにインポート前にhttpsで以下サイトへアクセスしようとすると以下の通り警告文が表示されます。
https://example.com

Windowsの証明書ストアにOpenSSLで作成した自己証明書がインポートされていないことが原因になります。
以上を踏まえてWindowsクライアントに先ほどOpenSSLで発行した自己証明書をインポートしていきます。
- step.1OpenSSLで作成したmyCA.crtをクライアント端末側にコピーします

一時的に共有フォルダーを作成するのがラクです
※コピーが終わりましたら、共有は解除してください - step.2「開く」を選択します

- step.3「証明書のインストール」をクリックします

- step.4「ローカル コンピューター」をクリックします

- step.5ユーザーアカウント制御が出るため、「はい」を選択します

- step.6「証明書をすべて次のストアに配置する」を選択し、参照をクリックします

- step.7「信頼されたルート証明機関」を選択し、「OK」をクリックします

- step.8証明書ストアに先ほど選択した「信頼されたルート証明機関」が入力されていることを確認し、「次へ」をクリックします

- step.9「完了」をクリックします

- step.10「OK」をクリックします

- step.11「OK」をクリックします

動作確認(httpsサイトを実際に中継)
実際にwindowsクライアント側からexample.comへアクセスを行いたいと思います。
確認項目は以下2点になります。
ブラウザでの証明書検証
- step.1windowsクライアント側からexample.comへアクセスする

- step.2証明書ビュアーから自己証明書が使われていることを確認する

ログで復号できているか確認
クライアント側でexample.comへアクセスした後にsquid側のログを確認します。
以下がexample.comに関するログの抜粋になります。
※実際は大量のログが発生しますので、検索を使って抽出することをおすすめします。
2025/11/30 17:42:40 1764492160.251 125 10.0.2.20 TCP_MISS/200 799 GET https://example.com/ - HIER_DIRECT/23.220.75.232 text/html
2025/11/30 17:42:40 1764492160.468 159 10.0.2.20 TCP_MISS/404 1009 GET https://example.com/favicon.ico - HIER_DIRECT/23.220.75.232 text/html
補足になりますが、
SSL Bumpなしでブラウザでexample.comへアクセスした場合、
Squidは暗号化された通信を中継するだけ役割になるため、ログからは詳細が確認ができません
google chromeを開きexample.comへアクセスしただけのログになります
2025/11/30 18:13:33 1764494013.867 379 10.0.2.20 TCP_TUNNEL/200 7319 CONNECT clientservices.googleapis.com:443 - HIER_DIRECT/216.58.220.99 -
2025/11/30 18:13:33 1764494013.868 71 10.0.2.20 TCP_TUNNEL/200 39 CONNECT ogads-pa.clients6.google.com:443 - HIER_DIRECT/142.250.206.202 -
2025/11/30 18:13:33 1764494013.869 374 10.0.2.20 TCP_TUNNEL/200 45355 CONNECT www.google.com:443 - HIER_DIRECT/142.250.76.36 -
2025/11/30 18:13:33 1764494013.869 284 10.0.2.20 TCP_TUNNEL/200 5893 CONNECT www.google.com:443 - HIER_DIRECT/142.250.76.36 -
2025/11/30 18:13:33 1764494013.902 407 10.0.2.20 TCP_TUNNEL/200 6520 CONNECT accounts.google.com:443 - HIER_DIRECT/173.194.174.84 -
2025/11/30 18:13:35 1764494015.396 1526 10.0.2.20 TCP_TUNNEL/200 11211 CONNECT ogads-pa.clients6.google.com:443 - HIER_DIRECT/142.250.206.202 -
2025/11/30 18:13:35 1764494015.396 1299 10.0.2.20 TCP_TUNNEL/200 11352 CONNECT ogads-pa.clients6.google.com:443 - HIER_DIRECT/142.250.206.202 -
2025/11/30 18:13:35 1764494015.396 591 10.0.2.20 TCP_TUNNEL/200 8794 CONNECT play.google.com:443 - HIER_DIRECT/172.217.31.142 -
2025/11/30 18:13:35 1764494015.399 848 10.0.2.20 TCP_TUNNEL/200 4858 CONNECT www.google.com:443 - HIER_DIRECT/142.250.76.36 -
2025/11/30 18:13:35 1764494015.399 389 10.0.2.20 TCP_TUNNEL/200 9034 CONNECT play.google.com:443 - HIER_DIRECT/172.217.31.142 -
2025/11/30 18:13:35 1764494015.413 59 10.0.2.20 TCP_TUNNEL_ABORTED/200 39 CONNECT update.googleapis.com:443 - HIER_DIRECT/142.250.196.99 -
2025/11/30 18:13:35 1764494015.432 0 10.0.2.20 TCP_DENIED/403 3709 CONNECT mtalk.google.com:5228 - HIER_NONE/- text/html
2025/11/30 18:13:35 1764494015.512 80 10.0.2.20 TCP_TUNNEL/200 39 CONNECT android.clients.google.com:443 - HIER_DIRECT/142.250.206.238 -
2025/11/30 18:13:35 1764494015.512 113 10.0.2.20 TCP_TUNNEL/200 39 CONNECT update.googleapis.com:443 - HIER_DIRECT/142.250.196.99 -
2025/11/30 18:13:43 1764494023.721 11 10.0.2.20 NONE/503 0 CONNECT inputsuggestions.msdxcdn.microsoft.com:443 - HIER_NONE/- -




コメント