【Squid】プロキシサーバ / Squid ~ Linux / SSLプロキシ構築編 ~

■ はじめ

https://dk521123.hatenablog.com/entry/2017/06/23/223438
https://dk521123.hatenablog.com/entry/2017/06/26/224311

の続き。

【0】前提条件

* 以下の関連記事を参考に、Squid を設定しておくこと

プロキシサーバ / SquidLinux / 初期設定編 ~
https://dk521123.hatenablog.com/entry/2017/06/23/223438

【1】構文

* cert=【サーバー証明書のパス名】
* key=【秘密鍵のパス名】

【2】構成

         +-----------+       +-----------+       +-----------+
  http   |           | https |           | https |           |
 --------| SSL Proxy |-------| Internet  |-------| Any (SSL) |
  3128   |           |  443  |           |  443  |    Server |
         +-----------+       +-----------+       +-----------+

【3】準備

1)証明書ファイルの作成

 * とりあえず、今回はオレオレ証明書で。
  (詳細は、以下の関連記事の「[1] 認証局(CA)の生成」を参照のこと)

証明書ファイルを配置する

sudo cp /etc/pki/CA/private/ca.key /etc/squid/.
sudo cp /etc/pki/CA/cacert.pem /etc/squid/.

sudo ls -l /etc/squid

プロキシサーバ側のファイル

# ファイル名 説明 備考
1 /etc/squid/ca.key CAの秘密鍵ファイル(パスフレーズなし) パスフレーズなしの秘密鍵じゃないとエラーになる
2 /etc/squid/cacert.pem CAの証明書ファイル -

【4】構築手順

0)はまりポイント

[1] パスをミスってる(「/usr/lib64/squid/ssl_crtd」周辺)
[2] パスフレーズありの秘密鍵ファイルを使用している(「key=/etc/squid/ca.key」周辺)
[3] 証明書ファイルが正しく作成できていない

1)証明書が保存されるディレクトリの作成

sudo /usr/lib64/squid/ssl_crtd -c -s /var/db/ssl_db

sudo chown squid:squid -R /var/db/ssl_db

2)設定ファイル「squid.conf」の修正

sudo vi /etc/squid/squid.conf

#http_port 3128
http_port 3128  ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/cacert.pem key=/etc/squid/ca.key

ssl_bump bump all
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/db/ssl_db -M 4MB

3)Squid を再起動する

# 再起動
sudo systemctl restart squid

# 「active (running) 」であることを確認
sudo systemctl status squid

# 使用しているポート番号一覧表示し、「3128」が表示されることを確認
ss -tln

4)動作確認

[0] Firefoxなどのブラウザで、「yahoo.co.jp」をアクセスする(不正なサイトなどのエラーが表示される)
[1] 証明書ファイル「cacert.pem」を確認したい環境(WindowsPCなど)にもってくる
[2] Firefoxなどのブラウザで、証明書ファイル「cacert.pem」をインポートしておく
[3] Firefoxなどのブラウザで、「yahoo.co.jp」をアクセスする(「yahoo.co.jp」が表示されるはず)

【5】補足:別の設定

/etc/squid/squid.conf

acl tcp_level at_step SslBump1
acl client_hello_peeked at_step SslBump2
ssl_bump peek tcp_level all

acl to_target_host_ssl ssl::server_name 【SANsに記載されているホスト名/IPアドレス】

ssl_bump splice client_hello_peeked to_target_host_ssl

# SANsに記載されているホスト名/IPアドレスと正規証明書以外のサイトをエラーにしたい場合はコメントアウト
#ssl_bump terminate all
ssl_bump bump all

参考文献

http://qiita.com/suzukis/items/5049f39cb1ee51e94a23
http://pslabo.hatenablog.com/entry/20150703/p1
http://mz80.ism21.net/?Linux%20Memo%2Fsquid(%A5%EA%A5%D0%A5%D7%A5%ED)
http://server-setting.info/centos/squid-reverse-proxy.html
http://oracle-abc.wikidot.com/ja:squid-reverse-proxy-for-ssl

関連記事

【ネットワーク】プロキシ / Proxy
https://dk521123.hatenablog.com/entry/2017/08/08/224300
プロキシサーバ / SquidLinux / 初期設定編 ~
https://dk521123.hatenablog.com/entry/2017/06/23/223438
プロキシサーバ / SquidLinux / Basic認証編 ~
https://dk521123.hatenablog.com/entry/2017/06/26/224311