也许很多MJJ在做运营TikTok,Facebook,WhatsApp等APP遇到了封控限制
期间MJJ们尝试了各种伪装,加密,更换优质线路,昂贵的线路….都不起作用
那么现在超顶的https伪装来了
此搭建方式是UP御用的搭建方式(一般都卖给老板的,利润超级可观)
开始之前我们先捋清楚FRP的客户端与服务端的关系:
服务端:frps是放置在你中转鸡上的配置
客户端:frpc是放置在你优质线路鸡(落地鸡)的配置
那么我们开始吧
首先下载FRP到你的双鸡上,对应版本Github地址如下
然后申请一个域名,假如这个域名是:proxy.example.com
不需要下什么Nginx之类的,买完域名做好指向,给服务器申请免费证书(https实验版证书也行)
接下来这是我们服务端 (frps.toml)配置文件:
注意:端口是443
[common]
bind_port = 443 # 改成 443
auth.method = "token"
auth.token = "随意填写一个对应密钥"
# 开启 TLS,并加载证书
transport.tls.enable = true
transport.tls.certFile = "/etc/letsencrypt/live/proxy.example.com/fullchain.pem"
transport.tls.keyFile = "/etc/letsencrypt/live/proxy.example.com/privkey.pem"
接下来是我们的客户端 (frpc.toml)配置文件:
serverAddr = "你的域名"
serverPort = 443 # 改成 443
auth.method = "token"
auth.token = "跟服务端一摸一样的密钥"
transport.tls.enable = true
transport.tls.serverName = "你的域名"
[[proxies]]
name = "socks5"
type = "tcp"
remotePort = 6000 # socks5的端口
[proxies.plugin]
type = "socks5"
username = "账号"
password = "密码"
配置完以上文件后,我们先启动服务端文件—-然后再启动客户端文件
启动服务端
./frps -c ./frps.toml
启动客户端
./frpc -c ./frpc.toml
这时候使用你们的socks5工具进行连接(比如小火箭 V2rayn…..等等之类的)
客户端连接配置
代理地址:proxy.example.com
端口:6000
用户名:你的账号
密码:你的密码
配上一个SSL长达360天的免费实验证书申请方式
import os
import datetime
import OpenSSL.crypto as crypto
# 证书存放路径
CERT_FILE = "ssl.crt"
KEY_FILE = "ssl.key"
# 证书有效期(单位:天)
VALID_DAYS = 365
# 你的域名列表(主域名 + 额外域名)
DOMAIN_NAMES = ["404zone.com", "www.404zone.com"]
def generate_ssl_cert(cert_file, key_file, valid_days, domain_names):
"""生成自签名 SSL 证书,支持多个域名(SAN 扩展)"""
key = crypto.PKey()
key.generate_key(crypto.TYPE_RSA, 2048)
cert = crypto.X509()
cert.get_subject().C = "CN" # 国家
cert.get_subject().ST = "Beijing" # 省份
cert.get_subject().L = "Beijing" # 城市
cert.get_subject().O = "MyCompany" # 组织名
cert.get_subject().OU = "IT" # 组织单位
cert.get_subject().CN = domain_names[0] # 主域名
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0) # 证书生效时间
cert.gmtime_adj_notAfter(valid_days * 24 * 60 * 60) # 证书到期时间
cert.set_issuer(cert.get_subject()) # 自签名
cert.set_pubkey(key)
# 添加 SAN 扩展,支持多个域名
san_list = ", ".join(f"DNS:{domain}" for domain in domain_names)
san_extension = crypto.X509Extension(b"subjectAltName", False, san_list.encode())
cert.add_extensions([san_extension])
cert.sign(key, "sha256")
# 保存私钥
with open(key_file, "wb") as f:
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
# 保存证书
with open(cert_file, "wb") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
print(f"✅ 证书生成成功!\n 📄 证书路径: {cert_file}\n 🔑 私钥路径: {key_file}")
def check_and_renew_cert(cert_file, key_file, valid_days, domain_names, renew_days=30):
"""检查证书是否快过期,并在需要时自动续期"""
if not os.path.exists(cert_file) or not os.path.exists(key_file):
print("⚠️ 证书不存在,正在生成新证书...")
generate_ssl_cert(cert_file, key_file, valid_days, domain_names)
return
with open(cert_file, "rb") as f:
cert_data = f.read()
cert = crypto.load_certificate(crypto.FILETYPE_PEM, cert_data)
# 解码证书的到期时间
expiry = cert.get_notAfter().decode("utf-8")
expiry = datetime.datetime.strptime(expiry, "%Y%m%d%H%M%SZ") # 解析到期时间
# 将 expiry 转换为带时区信息的时间
expiry = expiry.replace(tzinfo=datetime.timezone.utc) # 给 expiry 添加时区信息
# 获取当前时间并加上时区信息
current_time = datetime.datetime.now(datetime.timezone.utc)
# 计算剩余天数
remaining_days = (expiry - current_time).days
print(f"🔍 证书有效期剩余 {remaining_days} 天")
if remaining_days < renew_days:
print("⏳ 证书即将到期,正在自动续期...")
generate_ssl_cert(cert_file, key_file, valid_days, domain_names)
else:
print("✅ 证书仍然有效,无需续期")
if __name__ == "__main__":
check_and_renew_cert(CERT_FILE, KEY_FILE, VALID_DAYS, DOMAIN_NAMES)
好啦 就是这么简单 赶快评论点赞
