【Linux】プロキシサーバソフト [3] ~ Squid / SSLプロキシ構築編 ~

■ 前提条件

 * 以下の関連記事を参考に、Squid を設定しておくこと
https://blogs.yahoo.co.jp/dk521123/36956970.html

■ 構文

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

■ 構成

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

■ 準備

証明書ファイルの作成

 * とりあえず、今回はオレオレ証明書で。
  (詳細は、以下の関連記事の「[1] 認証局(CA)の生成」を参照のこと)
http://blogs.yahoo.co.jp/dk521123/36499701.html
証明書ファイルを配置する
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.keyCAの秘密鍵ファイル(パスフレーズなし)パスフレーズなしの秘密鍵じゃないとエラーになる
2/etc/squid/cacert.pemCAの証明書ファイル-

■ 構築手順

はまりポイント

[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」が表示されるはず)


■ 補足:別の設定

https://blogs.yahoo.co.jp/dk521123/37044650.html
より、抜粋

squid.conf

sudo vi /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


関連記事

プロキシサーバソフト ~ Squid / 初期設定編 ~

https://blogs.yahoo.co.jp/dk521123/36956970.html

プロキシサーバソフト ~ Squid / Basic認証編 ~

https://blogs.yahoo.co.jp/dk521123/36962466.html

Squid に関するトラブルシュート

https://blogs.yahoo.co.jp/dk521123/37044650.html

Javaで、SSLプロキシに接続した際に例外「No subject alternative names present」が発生

https://blogs.yahoo.co.jp/dk521123/36967982.html

Linux】 Openssl での証明書作成

http://blogs.yahoo.co.jp/dk521123/36499701.html

ポートに関するコマンド

https://blogs.yahoo.co.jp/dk521123/36964337.html