无法通过 squid 代理连接到 HTTPS 网站

无法通过 squid 代理连接到 HTTPS 网站

我刚刚尝试在 CentOS7 中的 OpenVZ VPS 上创建代理服务器。一切顺利,但我无法访问 https 网站,如 google、instagram、facebook 等。它显示超时,响应时间太长。

我已经生成了 myCA.pem 证书,并且使用 ssl_bump 我已经链接了签名的证书而没有任何错误(用 检查过systemctl status squid),现在当我尝试连接到上面列举的网站时,没有出现任何互联网错误:

1

下面是我的squid.conf,这是我的cache.log http://pastebin.com/MUkujTig

acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
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 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

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow all
http_port 3128 ssl-bump \
 generate-host-certificates=on \
 dynamic_cert_mem_cache_size=4MB \
 key=/etc/squid/ssl_cert/myCA.pem \
 cert=/etc/squid/ssl_cert/myCA.pem

# SSL Bump Config
always_direct allow all
ssl_bump server-first all
sslproxy_cert_error deny all
sslproxy_flags DONT_VERIFY_PEER
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB    sslcrtd_children 8 startup=1 idle=1

hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
cache deny all

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

icp_port 3130

forwarded_for off

request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all

我在公共区域添加了 3128 端口firewall-cmd

答案1

对于我的目的来说,它不需要使用 sslbump,因此我已将其删除并通过在 squid.conf 中添加此行解决了该问题 dns_v4_first on

答案2

您的日志中有以下行:

 (ssl_crtd): Failed to initialize /var/lib/ssl_db/index.txt file for writing

这意味着您的 sslbump 配置有错误。

您的配置存在问题,因为/var/lib/ssl_db您无法使用以下命令初始化它,因此您无法将其用作 sslbump 存储。在发出命令之前,/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db该目录不应存在,否则命令将失败。但由于权限问题,用户无法在其中创建目录。因此,您需要通过执行以下命令将该目录更改为(以 root 身份启动!):ssl_dbsquid/var/lib/var/lib/squid/ssl_db

  1. sudo su(或者其他任何获取 root shell 的方法)
  2. mkdir /var/lib/squid/
  3. chown -R squid:squid /var/lib/squid/
  4. su -l squid -s /bin/bash(下一个命令应该以用户身份运行squid,因此这一步很重要)
  5. /usr/lib64/squid/ssl_crtd -c -s /var/lib/squid/ssl_db

如果成功,输出应显示:

 Initialization SSL db...
 Done

现在将 squid.conf 更改为新的 ssl_db 目录:

sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/lib/squid/ssl_db -M 4MB

此指令应从新行开始,您的配置文件中有一个错误:

sslcrtd_children 8 startup=1 idle=1

我希望这会有所帮助(除非你正在进行一些审查,那么我希望它不会:))!

PS:这不是你的情况,但我还是要补充一点:

不同的发行版将ssl_crtd命令放入不同的目录中,但人们倾向于在不先检查其存在的情况下复制配置文件。/usr/lib64/squid/ssl_crtdsquid用户身份启动应显示:

Uninitialized SSL certificate database directory: . To initialize, run "ssl_crtd -c -s ".

如果是那样的话command not found,那么ssl_crtd可能实际上位于/usr/libexec/squid/ssl_crtd

PPS 经过两个小时的 skype 会话尝试修复无法修复的问题后,找到了解决方案 - 禁用 ipv6,托管服务提供商错误配置了 :)

谁会想到,这一切都将分解为以下命令:

 sysctl -w net.ipv6.conf.all.disable_ipv6=1
 sysctl -w net.ipv6.conf.default.disable_ipv6=1
 sysctl -w net.ipv6.conf.lo.disable_ipv6=1

并添加:

 dns_v4_first on

进入 squid.conf

相关内容