3x-ui-证书部署与排障教程.md 5.9 KB

3x-ui 证书部署与排障教程

一句话原则

先保证域名解析正确80 端口可用于 Let’s Encrypt 验证,再申请证书;申请完成后一定检查证书文件是否完整,以及面板端口实际是否已经启用 HTTPS


一、部署前准备

1. 准备域名并解析到服务器公网 IP

例如:

  • cc.opentouch.top

检查命令:

nslookup cc.opentouch.top

或:

ping cc.opentouch.top

要求:解析出来的 IP 必须是当前服务器公网 IP。


2. 放行端口

至少放行以下端口:

  • 80:Let’s Encrypt 申请证书时做 HTTP-01 验证
  • 443:标准 HTTPS / 后续反代可能会用到
  • 3x-ui 面板端口,例如 50325

需要同时检查:

  • 云平台安全组
  • 服务器本机防火墙

3. 检查 80 端口是否被占用

ss -ltnp | grep ':80'

如果 80 端口已被 Nginx / Apache / Caddy 等服务占用,申请证书时要注意冲突。


二、在 3x-ui 中申请证书的正确顺序

进入菜单:

x-ui

选择:

  • 19SSL Certificate Management

这里最关键的两个选项:

  • 19 -> 1Get SSL (Domain),用于申请域名证书
  • 19 -> 5Set Cert paths for the panel,用于把证书绑定给面板

注意:进入 19 不等于证书已经可用。


三、正确部署步骤

第一步:申请证书

走:

  • 19 -> 1

输入域名,例如:

  • cc.opentouch.top

如提示端口,一般使用默认的 80

第二步:绑定证书路径给面板

走:

  • 19 -> 5

常见路径:

/root/cert/你的域名/fullchain.pem
/root/cert/你的域名/privkey.pem

例如:

/root/cert/cc.opentouch.top/fullchain.pem
/root/cert/cc.opentouch.top/privkey.pem

第三步:重启 3x-ui

x-ui restart

四、如何确认证书真的没问题

不要只看菜单提示成功,要做下面 3 个检查。

检查 1:证书文件是否存在且非空

ls -l /root/cert/你的域名/

例如:

ls -l /root/cert/cc.opentouch.top/

重点看:

  • fullchain.pem
  • privkey.pem

正常情况:

  • 两个文件都存在
  • fullchain.pem 不是 0 字节

如果 fullchain.pem 是空文件,说明证书损坏或签发未完成。


检查 2:证书内容是否是 PEM 格式

sed -n '1,5p' /root/cert/你的域名/fullchain.pem

正常应看到:

-----BEGIN CERTIFICATE-----

检查私钥:

sed -n '1,5p' /root/cert/你的域名/privkey.pem

正常应看到:

-----BEGIN EC PRIVATE KEY-----

或:

-----BEGIN PRIVATE KEY-----

如果 fullchain.pem 为空,或者没有 BEGIN CERTIFICATE,说明文件不可用。


检查 3:面板端口实际是不是 HTTPS

curl -vk https://你的域名:面板端口/

例如:

curl -vk https://cc.opentouch.top:50325/

如果报类似错误:

  • SSL_ERROR_RX_RECORD_TOO_LONG
  • wrong version number

通常说明该端口实际还在跑 HTTP,并没有真正启用 HTTPS。


五、为什么明明配置了 19,还会出现 80 端口问题

这是 3x-ui 新手最容易误解的点。

原因

你最终访问的是:

https://域名:50325/

Let’s Encrypt 在签发域名证书时,默认需要从公网访问:

http://域名/.well-known/acme-challenge/...

也就是说:

  • 50325 是面板服务端口
  • 80 是证书验证端口

所以即使你是给 50325 配 HTTPS,申请证书时依然可能卡在 80


六、为什么会出现“证书损坏”

常见表现:

  • fullchain.pem 是空文件
  • privkey.pem 有内容
  • 日志中出现:

    tls: failed to find any PEM data in certificate input
    

这表示:

  • 面板试图启用 HTTPS
  • 但读取到的证书链文件无效
  • 最终 HTTPS 没有真正生效
  • 浏览器访问 https://域名:端口/... 会失败

所以不要只看 3x-ui 菜单提示,一定要检查文件本身。


七、遇到问题时的标准处理方法

情况 A:只是证书路径绑定错了

优先尝试:

  • 19 -> 5

重新绑定正确路径后执行:

x-ui restart

情况 B:证书文件本身坏了

表现:

  • fullchain.pem 为空
  • PEM 报错
  • 面板端口实际返回 HTTP 而不是 HTTPS

这种情况不要只重复点一次 19 -> 1,更稳妥的方法是:

  1. 清理损坏的 ACME 状态
  2. 重新申请证书
  3. 重新安装到 /root/cert/域名/
  4. 重启 x-ui
  5. 再验证 HTTPS

八、推荐的标准部署流程

以后在新服务器部署 3x-ui,建议固定按下面顺序操作:

  1. 安装 3x-ui
  2. 配置域名解析到服务器公网 IP
  3. 放行 80 / 443 / 面板端口
  4. 确认 80 端口没有冲突

    ss -ltnp | grep ':80'
    
  5. 19 -> 1 申请域名证书

  6. 检查证书文件是否非空

    ls -l /root/cert/你的域名/
    
  7. 19 -> 5 绑定证书路径给面板

  8. 重启 3x-ui

    x-ui restart
    
  9. 实测 HTTPS 是否正常

    curl -vk https://你的域名:面板端口/
    

九、30 秒排障清单

以后打不开 https://域名:端口/...,按这个顺序查:

  1. 域名解析是否正确
  2. 80 端口是否能用于 Let’s Encrypt 验证
  3. /root/cert/域名/fullchain.pem 是否为空
  4. x-ui 日志里是否有 PEM 报错
  5. 面板端口实际跑的是 HTTP 还是 HTTPS
  6. 决定是“重绑证书”还是“重签证书”

十、最短结论

  • 19 只是证书管理入口,不代表证书一定已经可用
  • 50325 配 HTTPS,不代表申请证书时不需要 80
  • 证书申请完成后,必须检查 fullchain.pem 是否有效
  • 如果 fullchain.pem 是空的,HTTPS 一定不能正常工作
  • 以后不要盲目重复点 19,先判断是绑定问题还是证书损坏问题