由于经常去的一些国外网站如Google、Blogspot、Wordpress被“出现了技术问题”,访问不了,于是我在自己的DigitalOcean云主机上搭建了一个 Squid代理服务器用于科学上网。Squid支持HTTP、HTTPS代理,因此能够满足日常访问国外某些网站的需求。然而如果直接使用HTTP连接Squid是明文传输的,在第一次使用时,会马上“出现技术问题”,因此需要使用 stunnel加密代理通道。具体配置步骤如下,云主机的Linux发行版是Ubuntu
14.10 x32,如果你使用的是其他发行版,包管理与配置文件路径会略有不同。

安装必要的软件

安装apache2-utils用于HTTP认证文件的生成,

apt-get install apache2-utils -y

安装Squid,

apt-get install squid3 -y

安装stunnel,

apt-get install stunnel4 -y

配置Squid

生成HTTP认证文件,输入对应的密码。这个认证文件用于之后HTTP代理的认证登录,如果不需要登录认证,可以略过。

htpasswd -c /etc/squid3/squid.passwd <登录用户名>

修改Squid默认配置,配置文件位于 /etc/squid3/squid.conf 

1. 修改监听地址与端口号

找到 TAG: http_port 注释,把其下方的

# Squid normally listens to port 3128
http_port 3128

中 http_port 修改为 127.0.0.1:3128 ,使得Squid只能被本地(127.0.0.1)访问。此处可以修改为监听其他端口号。

2. 修改访问权限与HTTP认证(可选)

若不需要添加HTTP认证,只需将 http_access
deny all 
修改为 http_access
allow all 
即可,无需下列的操作。

使用如下命令生成认证文件,

htpasswd -c /etc/squid3/squid.passwd <登录用户名>

再次打开Squid配置文件 /etc/squid3/squid.conf ,找到 TAG: auth_param 注释,在其下方添加,

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/squid.passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

找到 TAG: acl ,在其下方添加,

acl ncsa_users proxy_auth REQUIRED

找到 TAG: http_access ,在其下方添加,使得只允许经过认证的用户访问,

http_access deny !ncsa_users
http_access allow ncsa_users

3. 重启Squid

service squid3 restart

配置stunnel

接下来,我们需要在Squid上添加一层加密。

生成公钥和私钥

生成私钥( privatekey.pem ):

openssl genrsa -out privatekey.pem 2048

生成公钥( publickey.pem ):

openssl req -new -x509 -key privatekey.pem -out publickey.pem -days 1095

(需要注意的是, Common Name 需要与服务器的IP或者主机名一致)

合并:

cat privatekey.pem publickey.pem >> /etc/stunnel/stunnel.pem

修改stunnel配置

新建一个配置文件 /etc/stunnel/stunnel.conf ,输入如下内容

client = no
[squid]
accept = 4128
connect = 127.0.0.1:3128
cert = /etc/stunnel/stunnel.pem

配置中指定了stunnel所暴露的HTTPS代理端口为4128,可以修改为其他的值。

修改 /etc/default/stunnel4 配置文件中 ENABLED 值为1。

ENABLED=1

重启stunnel

service stunnel4 restart

至此,服务器端已配置完成了。

本地浏览器配置

添加证书到受信任的根证书颁发机构列表中

以Windows下Chrome浏览器为例,将服务器上的公钥 publickey.pem 下载至本地,重命名至 publickey.crt ,在Chrome中依次点击
“设置” - “显示高级设置” - “HTTP/SSL” - “管理证书”,在“受信任的根证书颁发机构”选项卡中“导入”这个crt证书就完成了。

代理客户端配置

将本地的代理客户端指向 https://<你的服务器IP或主机名>:4128 ,这里的IP或主机名和生成公钥时的 Common Name 一致,端口为stunnel的端口。如果有配置HTTP认证的话,需要在客户端中配置对应的用户名和密码。如果没有HTTP客户端的话,推荐使用Chrome的插件 Proxy
SwitchyOmega
(使用教程可以参考 Github上的Wiki)。

使用Squid搭建HTTPS代理服务器的更多相关文章

  1. Squid 搭建正向代理服务器

    Squid 是一款缓存代理服务器软件,广泛用于网站的负载均衡架构中,常见的缓存服务器还有varnish.ATS等. 正向代理服务器可满足内网仅有一台服务器可以上网,而要供内网所有机器上网的需求,也可以 ...

  2. centos7.3使用squid搭建代理服务器

    centos7.3使用squid搭建代理服务器 1 安装 yum install squid 2 编辑 vi /etc/squid/squid.conf 3 设置 最底部增加 如下http_acces ...

  3. centos7.6_x86_64使用Squid搭建代理服务器让windows上网

    centos7.6_x86_64使用Squid搭建代理服务器让windows上网 windows机器很多站点访问受限,可以在没有限制外网的机器上面搭建代理服务器,其它电脑可以配置代理通过这台不受限制的 ...

  4. 使用poco 的NetSSL_OpenSSL 搭建https 服务端,使用C++客户端,java 客户端访问,python访问(python还没找到带证书访问的代码.)

    V20161028 由于项目原因,需要用到https去做一些事情. 这儿做了一些相应的研究. 这个https 用起来也是折腾人,还是研究了一周多+之前的一些积累. 目录 1,java client 通 ...

  5. Nginx搭建https服务器

    HTTPS简介 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来讲就是HTTP的安全版.即H ...

  6. NodeJS搭建HTTPS服务器

    [NodeJS搭建HTTPS服务器] http://cnodejs.org/topic/54745ac22804a0997d38b32d

  7. win10系统iis下部署搭建https (ssl/tls)本地测试环境

    有时想要把公司的某些XX项目部署成https站点,是为了在传输层加密传输,防止他人嗅探站点重要数据信息,平常我们使用的http方式都是明文方式传输的很不安全,容易被他人窃取.而有些时候要在本地搭建ht ...

  8. 如何申请https证书、搭建https网站

    如何申请https证书.搭建https网站 随着国内搜索引擎巨头百度启用全站https加密服务,全国掀起了网站https加密浪潮.越来越多的站点希望通过部署https证书来解决“第三方”对用户隐私的嗅 ...

  9. Nginx搭建反向代理服务器

    [大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器   一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受int ...

随机推荐

  1. Intellij IDEA错误识别.xml文件

    转自原文Intellij IDEA错误识别文件 今天上午弄了一个多小时,对idea感到十分的沮丧,真是太不好用了,一点儿都不智能,而且有些地方,还被自动的配置错误,导致操作起来就像是脱缰的野马. 言归 ...

  2. WebLogic Server的密码复杂性规则设置

    WebLogic Server默认的密码复杂性规则是长度为8位以上,必须包含数字和字母,但对于很多企业的安全而言是不足够的,因此WebLogic Server在Security模块中提供了Passwo ...

  3. sersync部署

    rsync :  wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz Sersync: wget https://raw.git ...

  4. OneThink框架的文章详情页分页

    Application/Home/Controller/ArticleController.class.php的detail函数修改结果如下: /* 文档模型详情页 */public function ...

  5. SQLSERVER调用DLL程序

    在SQL Server中调用dll分为两个步骤 1.创建一个dll文件(dll文件分成3种类型,讲其中一种) 2.把dll文件放进SQL Server的程序集中.然后定义一个Function,就可以通 ...

  6. Java程序运行的内存分配

    Java的内存分配 A:栈 存储局部变量 B:堆 存储所有new出来的 C:方法区(程序代码及方法相关) D:本地方法区(系统相关) E:寄存器(CPU使用) 注意: a:局部变量 在方法定义中或者方 ...

  7. ibatis中使用List作为传入参数的使用方法及 CDATA使用

    ibatis中list做回参很简单,resultClass设为list中元素类型,dao层调用: (List)getSqlMapClientTemplate().queryForList(" ...

  8. 【前后台分离模式下,使用OAuth Token方式认证】

    AngularJS is an awesome javascript framework. With it’s $resource service it is super fast and easy ...

  9. selinux 是什么 (Linux)

    SElinux是Linux安全加强工具.关闭用setenforce 0或者修改文件vim /etc/sysconfig/selinux 把SELINUX=enforcing 改为 SELINUX=di ...

  10. 工作笔记4.struts2上传文件到server

    本文介绍两种:上传文件到server的方式   一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完毕文件上传,我们应该将这 ...