🔐 Squid + ADCS で SSL Bump を構成する手順(社内向け)
🔍 概要
このドキュメントは、社内の Active Directory Certificate Services (ADCS) を用いて、Squid プロキシで SSL Bump(HTTPS 通信の中間解釈) を構成する方法を説明します。
目的は、社内クライアントの HTTPS トラフィックを可視化・制御(マルウェア検査・URL フィルタリング等)することです。
🧩 前提条件
- ADCS(Enterprise CA)が稼働していること
- サブCA証明書を発行できる権限があること
- Squid 4.x 以上(Linux環境)
ssl_crtdが利用可能- クライアントは AD ドメイン参加済み(GPO 配布が可能)
🗺️ アーキテクチャ概要
[Client]
│ HTTPS
▼
[Squid Proxy (ssl_bump + CA cert + ssl_crtd)]
│ HTTPS
▼
[Internet / Origin Server]

Squid は ADCS から発行された「サブCA証明書」を使い、HTTPS 通信を復号・再暗号化します。
⚙️ 構成パターン
| 方式 | 説明 | 推奨度 |
|---|---|---|
| A. サブCA方式(推奨) | ADCS から Squid 用のサブCA証明書を発行し使用 | ⭐⭐⭐⭐⭐ |
| B. 自己署名方式 | Squid が自己署名 CA を作成し、GPO で配布 | ⭐⭐ |
🧾 ADCS 側の設定(サブCA発行)
CSR 生成(Squid側)
・Squid用のサブCA証明書を発行するための「証明書署名要求(CSR)」を作成します。
・CSRの署名用にまず秘密鍵(※)を作成し、その秘密鍵を指定してCSRを発行します。
openssl genrsa -out squid_subca.key 4096
cat > ca_req.conf
[ req ]
default_bits = 4096
prompt = no
distinguished_name = dn
x509_extensions = v3_ca
[ dn ]
C = JP
ST = Tokyo
L = Tokyo
O = Cisco
OU = CXPS
CN = Squid-Proxy-SubCA
[ v3_ca ]
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, cRLSign, keyCertSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
openssl req -new -key squid_subca.key -out squid_subca.csr -config ca_req.conf
🧱 Squid 側の設定
ssl_crtd 初期化
・ssl_crtd とは、Squidで SSL Bump を行う際に使われる「動的証明書生成用の補助プログラム」です。
・SSL Bump では、プロキシが中間者として通信を復号するために、アクセス先ごとに「偽のサーバ証明書」を動的に発行します。
・その証明書を実際に生成・キャッシュしているのが ssl_crtd です。
SSLDB=/var/lib/ssl_db
mkdir -p ${SSLDB}
chown -R proxy:proxy ${SSLDB}
/usr/lib64/squid/security/ssl_crtd -c -s ${SSLDB}
証明書配置
1. サブCA証明書を /etc/squid/ssl_cert/squid_ca_cert.pem に書き込みます。
2. ルートCA証明書を /etc/squid/ssl_cert/squid_ca_cert.pem の末尾に追記し、「証明書チェーン」を1ファイルにまとめます。
3. サブCAの秘密鍵を .pem 形式で保存します。この鍵が実際に SSL bump で動的証明書を署名するために使用されます。
cat squid_subca.crt > /etc/squid/ssl_cert/squid_ca_cert.pem
cat root_ca.crt >> /etc/squid/ssl_cert/squid_ca_cert.pem
cat squid_subca.key > /etc/squid/ssl_cert/squid_ca_key.pem
squid.conf 設定例
http_port 3128
https_port 3129 ssl-bump cert=/etc/squid/ssl_cert/squid_ca.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
sslcrtd_program /usr/lib/squid/security/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 8 startup=1 idle=1
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
sslproxy_options NO_SSLv3 NO_TLSv1
sslproxy_cipher HIGH:!aNULL:!MD5
🖥️ クライアント側:CA信頼の配布(GPO)
- GPO → Computer Configuration → Windows Settings → Security Settings → Public Key Policies → Trusted Root Certification Authorities
- ADCSルートCAまたはSquidサブCAをインポート
gpupdate /forceで反映- ブラウザでアクセスし、発行者が Squid-Proxy-SubCA になっていれば成功
🧪 動作確認
コマンドライン
curl -x http://<squid-ip>:3128 -k https://www.google.com/ -v
ブラウザ
HTTPS サイトにアクセスし、証明書発行者が Squid-Proxy-SubCA であることを確認します。
🧰 トラブルシュート
| 症状 | 原因 / 対処 |
|---|---|
| 証明書エラー | クライアントにCA未配布/チェーン不完全 |
| ssl_crtdエラー | ディレクトリ権限/初期化忘れ |
| 一部サイトでエラー | HSTSやピン留め → ssl_bump spliceで除外 |
acl sensitive dstdomain .bank.example
ssl_bump peek step1
ssl_bump splice sensitive
ssl_bump bump all
✅ チェックリスト
- ADCS 管理者承認済み
- サブCA発行完了
- Squid 鍵/証明書配置
- ssl_crtd 初期化
- GPO でCA配布
- ブラウザで発行者確認
- HSTSサイト除外設定
📚 補足:自己署名CA方式(簡易構成)
openssl req -new -x509 -days 3650 -newkey rsa:4096 -keyout squid_ca.key -out squid_ca.crt
cat squid_ca.crt squid_ca.key > /etc/squid/ssl_cert/squid_ca.pem
GPOでroot_ca.crtを配布し、構成はサブCA方式とほぼ同じです。