由于众所周知的原因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 18
| 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。