

現在、ローカルで起動したsquidでSSLデコードするという要件があり、以下のような構成で立ち上げています。

[code]

    |---- Local PC------|
    |                   |
    |Browser --> squid -|-->  proxy -->  Internet 
    |                   |
    |-------------------|
    
[/code]

Internetへ出るためには、別のproxyを通る必要があります。  
このproxyでは認識が必要なため、squid.confのcache_peerディレクティブで下記のように設定しています。

[code]

    acl intermediate_fetching transaction_initiator certificate-fetching 
    acl localnet src 10.0.0.0/8 
    acl localnet src 172.16.0.0/12  
    acl localnet src 192.168.0.0/16 
    acl localnet src fc00::/7       
    acl localnet src fe80::/10      
    acl SSL_ports port 443
    acl Safe_ports port 80      
    acl Safe_ports port 21      
    acl Safe_ports port 443     
    acl Safe_ports port 70      
    acl Safe_ports port 210     
    acl Safe_ports port 1025-65535  
    acl Safe_ports port 280     
    acl Safe_ports port 488     
    acl Safe_ports port 591     
    acl Safe_ports port 777     
    acl CONNECT method CONNECT
    acl ssl_exclude_domains ssl::server_name "/cygdrive/c/squid/etc/squid/ssl_exclude_domains.conf"  
    acl ssl_exclude_ips     dst              "/cygdrive/c/squid/etc/squid/ssl_exclude_ips.conf" 
    acl fileupload req_mime_type -i ^multipart/form-data$
    acl filedownload rep_mime_type -i ^multipart/form-data$
    acl fileupload2 req_header Content-Type -i ^multipart/form-data$
    http_access deny fileupload
    http_access deny filedownload
    http_access deny fileupload2
    http_access allow localhost manager
    http_access deny manager
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow localnet
    http_access allow localhost
    http_access deny all
    cache_peer 192.168.0.1 parent 81 0 no-query login=myusername:mypassword # 192.168.0.1 is company proxy 
    http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/cygdrive/c/squid/etc/squid/myca.crt key=/cygdrive/c/squid/etc/squid/myca.pem
    coredump_dir /var/cache/squid
    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
    ssl_bump bump all 
    on_unsupported_protocol tunnel all 
    sslcrtd_program /cygdrive/c/squid/lib/squid/security_file_certgen -s  /cygdrive/c/squid/var/cache/squid_ssldb -M 4MB 
    sslproxy_cert_error allow all 
    cache deny all
    
[/code]

ブラウザのプロキシ設定をローカルのsquidにセットし、任意のhttpsサイト( 例)
<https://www.google.com>)にリクエストすると、"The requested URL could not be retrieved"
とsquidのエラー画面が表示されます。

解決方法など、わかる方がいらっしゃればよろしくお願いいたします。


CC BY-SA 4.0
2021-08-27T02:57:11.360
81067
2021-08-28T02:11:46.357
47932
question
squid
多段プロキシ構成において、ローカルのsquidでSSLデコードしたい


`always_direct deny all`, `never_direct allow all` を設定していないので、Squid から直接
Webサーバーに接続を試みて、エラーとなっているのではないでしょうか。

ただし、上記設定しても、元の CONNECT を ssl-bump で GET にして親プロキシに接続する際、CONNECT ではなく GET
(HTTPS) で接続しようとして、失敗すると思います(ssl-bump + cache_peer でいわゆるリバースプロキシーの挙動になる)。

[SSL Bumping CONNECT With A cache_peer](https://squid-users.squid-
cache.narkive.com/6X2NLku7/ssl-bumping-connect-with-a-cache-peer)

`on_unsupported_protocol tunnel all` で CONNECT に変換してくれればいいのですが、そうはなっていないようです。  
他に方法があるのかもしれませんが、わかりませんでした。


CC BY-SA 4.0
2021-08-27T14:29:38.880
81079
2021-08-27T14:29:38.880
4603
81067
answer


> ローカルで起動したsquidでSSLデコードするという要件

ここだけ読むとあり得ない話です。要件を確認すべきかと。SSLデコードするということは、https通信をhttpへ変換することを意味します。

### squid - WebServer間をhttpにデコードする場合

いろいろ実現不可能です。  
具体的にはBrowserに`https://www.google.com`を入力した場合にsquidがデコードしsquid -
google間を`http://www.google.com`で通信します。しかしgoogleはセキュアでないため通信を認めないでしょう。  
仮に平文で通信できたとして、squidは`www.google.com`という名称の証明書で暗号化を行う必要があります。しかしそのような証明書はありませんので暗号化できないということになります。

### Browser - squid間をhttpにデコードする場合

Browser上で`http://www.google.com`を入力するとsquid - google間がhttps通信され、Browser -
squid間がhttpにデコードされるということになります。しかし多くのサイトはBrowser上のJavaScriptで処理をしており、Browser上のURLが`https://www.google.com`ではなく`http://www.google.com`に変わってしまっていると正しく動作しないと思われます。  
それに

> ブラウザのプロキシ設定をローカルのsquidにセットし、任意のhttpsサイト( 例)
> <https://www.google.com>)にリクエストすると

と書かれています。テスト内容がそもそも要件にあっていないです。


CC BY-SA 4.0
2021-08-28T02:11:46.357
81084
2021-08-28T02:11:46.357
4236
81067
answer