FRP多域名 SSL 证书配置全流程(以52cover.com和283103423.cn为例)

问题背景

需要让两个域名(含主域名和子域名)通过 HTTPS 安全访问,但存在证书不匹配、部分域名提示 “不安全” 的问题,且部署环境为飞牛 OS(NAS 系统),需通过 frp 代理实现。

解决核心思路

通过 Let's Encrypt 生成包含主域名 + 通配符子域名的合并证书,让一个证书覆盖所有需要的域名,再配置到 frp 服务中,解决安全提示问题。

具体步骤

  1. 生成包含多域名的证书
    使用 Certbot 工具申请覆盖以下域名的证书:

    • 主域名:52cover.com283103423.cn

    • 通配符子域名:*.52cover.com*.283103423.cn(覆盖所有子域名如 www)
      执行命令:

    bash

    sudo certbot certonly --manual --preferred-challenges dns \
      --email 283103423@qq.com \
      --server https://acme-v02.api.letsencrypt.org/directory \
      --agree-tos \
      -d "52cover.com" -d "*.52cover.com" \
      -d "283103423.cn" -d "*.283103423.cn"
    

  2. 完成 DNS 验证(关键步骤)

    • 根据 Certbot 提示,为每个域名添加对应的 DNS TXT 记录(如_acme-challenge.52cover.com),证明域名所有权。

    • 等待 DNS 记录生效(1-5 分钟),通过工具验证后按回车继续。

  3. 部署证书到 frp 服务

    • 证书生成路径:

      • 证书文件:/etc/letsencrypt/live/52cover.com/fullchain.pem

      • 私钥文件:/etc/letsencrypt/live/52cover.com/privkey.pem

    • 复制到 frp 证书目录:

      bash

      sudo cp /etc/letsencrypt/live/52cover.com/fullchain.pem /vol1/1000/Docker/mefrpc-2/18090/
      sudo cp /etc/letsencrypt/live/52cover.com/privkey.pem /vol1/1000/Docker/mefrpc-2/18090/
      

  4. 配置 frp 并重启服务
    在飞牛 OS 的 frp 配置界面(或配置文件)中,指定证书路径:

    toml

    [[proxies]]
    name = 'multi-domain'
    type = 'https'
    customDomains = ["52cover.com", "*.52cover.com", "283103423.cn", "*.283103423.cn"]
    
    [proxies.plugin]
    type = 'https2http'
    localAddr = '127.0.0.1:8090'
    crtPath = '/vol1/1000/Docker/mefrpc-2/18090/fullchain.pem'
    keyPath = '/vol1/1000/Docker/mefrpc-2/18090/privkey.pem'
    


    重启 frp 服务:sudo systemctl restart mefrpc

关键说明

  • 通配符证书*.domain.com仅覆盖子域名,需单独添加主域名domain.com才能完全覆盖。

  • 证书有效期为 90 天,到期前需重新执行 Certbot 命令续期(选择E扩展证书)。

  • 清除浏览器缓存后访问所有域名,均会显示安全锁图标。


通过以上步骤,实现了多个域名(含主域名和子域名)共用一个 SSL 证书,解决了 HTTPS 安全提示问题,且适配飞牛 OS 的 frp 代理环境。