折腾Squid的HTTPS反代

概述

Squid是一个常用的HTTP代理服务器,能做正向代理和反向代理。但是,它的HTTPS支持极其有限,宝宝不想看下去了

支持情况

仅考虑反向代理情况,详见文档

  • HTTPS反代(使用https_port配置)
  • 支持HTTP、HTTPS后端
  • HTTP/2计划在4.0版本中支持,正在进行中
  • 不支持SNI(即一个HTTPS端口使用多个证书)(仅支持正向代理情况下拦截

配置

前提条件

  • Squid-2.5 及更高
  • 编译时带有--enable-ssl参数(可通过squid -v查看编译参数)

Ubuntu 16.04 官方仓库中的Squid 3.5.12不支持,需要手动编译。CentOS 6 仓库中的Squid 3.1.23支持。

配置文件(以CentOS6仓库中的Squid-3.1为例)

https_port 443 vhost cert=/path/to/cert key=/path/to/key

对于3.3及更高版本,则应把vhost改为accel

如有多个子域名,则需要通配符证书。需要注意的是,Squid不支持SNI,即不能使用多个证书。

提高安全性可配置更详细一些

https_port 443 accel cert=/path/to/cert key=/path/to/key options=NO_SSLv2,NO_SSLv3 cipher=sth

NO_SSLv2,NO_SSLv3——用于禁止过时旧协议
cipher——可选配置,为禁用弱密码配置。参数参见Mozilla SSL Configuration Generator

其余配置保持即可。

评价

Squid作为代理服务器,对HTTPS支持比较基础。因开发者对加密的态度而不支持HTTPS的缓存服务器Varnish也在开发中的6.0版本伴随HTTP/2开始支持。除此之外,HAProxyTraffic Server等反向代理软件对HTTPS及HTTP/2均已经有较好的支持。

但总的来说,个人认为Squid作为HTTPS服务器有点勉强,更倾向使用Nginx获得更可现代、定制的HTTPS服务。