小蜗熊的蜂蜜罐
自签CA对Steam社区进行反代
发布于: 2021-01-15 更新于: 2021-01-19 分类于: 游戏 阅读次数: 

由于众所周知的原因Steam社区被屏蔽已久,使得部署在国内Linux云服务器上的ASF在使用上存在诸多不便。在此参照羽翼城大佬的Steam302工具的思路,使用自签CA+Nginx反代来绕过SNI过滤,由此解决Linux挂卡服务器或443端口被占用等特殊情况下的Steam社区访问问题。一般的Windows玩家直接使用羽翼城大佬的SteamCommunity 302更加方便。

使用OpenSSL自签CA

进行HTTPS反代需要部署中间证书,可以按如下方式自签,也可以直接使用SteamCommunity 302自动生成的根证书、私钥等文件进行部署。

生成CA根密钥:

1
openssl genrsa -out cakey.key 2048

自签发CA根证书:

1
openssl req -new -x509 -key cakey.key -out cacert.crt -days 3650

生成Steam社区私钥:

1
openssl genrsa -out steamcommunity.com.key 2048

生成Steam社区证书请求:

1
openssl req -new -key steamcommunity.com.key -out steamcommunity.com.csr

使用CA签发Steam社区证书:

1
openssl x509 -req -CA cacert.crt -CAkey cakey.key -CAcreateserial -extfile v3.ext -in steamcommunity.com.csr -out steamcommunity.com.crt -days 3650

其中v3.ext文件的内容

1
2
3
4
5
6
7
8
9
10
11
12
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = critical,CA:FALSE,pathlen:0
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyCertSign, cRLSign
subjectAltName = @alt_names
extendedKeyUsage = serverAuth
certificatePolicies=anyPolicy

[alt_names]
DNS.1 = steamcommunity.com
DNS.2 = *.steamcommunity.com
DNS.3 = steam-chat.com

配置反代服务器

SteamCommunity 302工具中使用的是caddy进行反代,由于我服务器的443端口同时运行着其他服务,因此直接在Nginx添加了一个vhost进行反代。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server 
{
listen 443 ssl;
server_name steamcommunity.com;

ssl on
ssl_certificate steamcommunity.com.crt;
ssl_certificate_key steamcommunity.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

location / {
proxy_pass https://xxx.xxx.xxx.xxx/;
proxy_set_header Host $http_host;
}
}

由于Steam使用的是Akamai CDN,因此proxy_pass一栏使用任意Akamai的IP均可。当proxy_pass的地址设置为ip时,Nginx不会对外暴露SNI。

--- 本文结束 The End ---