Squid4转发代理,从ws升级到wss

时间:2019-06-19 00:34:46

标签: websocket squid gorilla

Squid4.6用作将所有流量转换为安全流量的转发代理。 squid的配置非常简单,它允许所有流量,并使用urlrewrite.pl将“ http”替换为“ https”。(不使用SSL-BUMP)Squid代理设置了tls_outgoing_options,因此可以进行以下工作:

client(http)-----> Squid ------> Server(https)

现在,我正在尝试使用websockets复制相同的内容。 有3个测试用例, 1。    客户端(ws)------>鱿鱼----->服务器(ws)

  1. 客户端(wss)------>鱿鱼----->服务器(wss)

3    客户端(ws)------>鱿鱼----->服务器(wss)

前两种情况适用于鱿鱼,但第三种无效。而且我只需要第三个选项。
我已经为urlrewrite.pl提供了调试日志,以显示收到的Websocket连接的确切请求,以下是日志: 端口8080:是服务器,端口3128:是鱿鱼

调试:root:localhost:8080 127.0.0.1/localhost-CONNECT myip = 127.0.0.1 myport = 3128

即使Wireshark也显示相同的内容, 1.连接HTTP 1.1 2.取得 3.升级协议。

问题: 1.有什么方法可以使用squid4.6将websocket连接升级到安全的websocket吗? 2.或者说我使用wss-client(不带证书)和wss-server(带证书),有没有办法通知squid使用自己的证书(甚至在“ tls_outgoing_options”中提到)来建立连接?

必填: 客户端将始终发送不安全的流量HTTP / WS Squid应该将其升级到HTTPS / WSS。 在应用程序设置中,我们使用自己的openssl库创建证书-不能包含在(client.go)go-tls软件包中,因此我们使用squid代理来使用由我们自己的openssl库生成的证书。 客户端和转发代理(Squid)都在我们的特定环境中,因此squid.conf非常简单,并允许所有流量。 而且我们需要相互证书认证。

鱿鱼密码

#
# Recommended minimum configuration:
#

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl localhost src 127.0.0.1

acl SSL_ports port 443
acl Safe_ports port 443 # https
acl Safe_ports port 80  # http
acl CONNECT method CONNECT

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all

# Squid normally listens to port 3128
http_port 3128

url_rewrite_program /etc/squid/urlrewrite.pl
url_rewrite_access allow  all
tls_outgoing_options cert=/etc/squid/proxy.crt
tls_outgoing_options key=/etc/squid/proxy.key
tls_outgoing_options cafile=/etc/squid/serverauth.crt

urlrewrite CODE

#!/usr/bin/perl
select(STDOUT);
$| = 1;
while (<>) {
    #print STDOUT "OK rewrite-url=\"https://google.com\"\n";

    if (/^(|\d+\s+)((\w+):\/+)([^\/:]+)(|:(\d+))(|\/\S*)(|\s.*)$/) {
        my $channel = $1;
        my $protocolClean = $3;
        my $domain = $4;
        my $port = $5;
        my $portClean = $6;
        my $urlPath = $7;

    if ($protocolClean eq 'http' ){#&& ($port eq '' || $portClean eq '80')) {
           print STDOUT "${channel}OK rewrite-url=\"https://${domain}${port}${urlPath}\"\n";
       #print STDOUT "${channel}OK rewrite-url=\"https://google.com\"\n";
    } else {
           print STDOUT "${channel}ERR\n";
    }
    }
}

0 个答案:

没有答案