配置 frpc 使用的 SSL 证书

在以下两个典型场景中,您可能会需要 为 frpc 配置 SSL 证书,以避免证书错误提示:

  1. 隧道启用了 自动 HTTPS,但服务访问者不支持(或不愿)忽略 证书错误提示
  2. 隧道启用了 访问认证,但需要避免认证页面的 证书错误提示 以增强安全性

本文档将指导您为 frpc 配置 SSL 证书来避免 自动 HTTPS访问认证 功能造成的证书错误提示。

如果您没有使用上述功能,则 不适用 于本文档的内容,请参考您使用的 Web 服务器文档进行配置。

获取 SSL 证书

提示

您需要拥有一个属于自己的域名才能申请、部署 SSL 证书。如果您还没有域名,推荐直接使用 子域绑定 功能

有了域名后,选择一个 SSL 服务商,按照他们的流程进行申请即可。下面是一些常见的 SSL 服务商:

SSL 服务商 不必 是当前域名的注册商,按需选择适合您的平台即可。

证书域名注意事项

如您打算通过 sub.example.com 访问隧道,那么就应该为 sub.example.com*.example.com 申请证书

单/多域名证书
sub.example.com,仅对证书中单独列出的 sub.example.com 等域名有效

泛域名证书
以为 * 开头,如 *.example.com,对所有二级域名均有效,如 a.example.comb.example.com
但对于三级域名如 sub.sub.example.com 是无效的,需使用下一级的 *.sub.example.com 证书,以此类推

配置 frpc 的 SSL 证书

  1. 如果您没有打开自动 HTTPS 或访问认证功能,修改隧道配置并在 自动 HTTPS 处输入 SSL 证书对应域名

    修改完成后启动一次隧道,让 frpc 生成自签名证书文件。

  2. 自签名证书会被保存在 frpc 工作目录 中,配置前需要确认工作目录的位置。

    使用启动器时,启动器工作目录 里有一个 FrpcWorkingDirectory 文件夹,这个文件夹才是 frpc 工作目录,证书应该放在这个文件夹里。

    下面列出了启动器的常见工作目录位置:

    Windows

    在启动器中点击 设置 > 高级设置 > 打开工作目录 按钮即可打开启动器工作目录:

    进阶说明

    对于 v2.0.5.0 及以上版本,工作目录在 %ProgramData%\SakuraFrpService

    对于旧版本启动器,工作目录就是启动器的 frpc.exe 所在路径。

    如果您没有使用启动器,而是直接运行 frpc,点击展开

    如果您直接复制了 frpc 文档中的 Unit 示例,您的工作目录为 /usr/local/etc/natfrp

    您可也可以自己配置 WorkingDirectory 项来指定一个工作目录,例如:

    [Service]
    WorkingDirectory=/etc/frpc
    

    如果需要确认您目前的配置,请执行 grep "WorkingDirectory" /etc/systemd/system/[email protected]

    如果上面的指令不显示任何内容,请编辑 /etc/systemd/system/[email protected] 加入 WorkingDirectory=一个目录

    对于 Docker 用户

    Docker 工作目录默认为 /run/frpc,但是该目录中的文件会在容器销毁时丢失。

    请使用 -v--mount 挂载证书文件到该目录中,并且最好挂载为只读。

    下面的示例将 /root/my.{crt,key} 两个文件挂载到容器的 /run/frpc/example.com.{crt,key} 中:

    # 用 -v
    docker run (其他参数) \
        -v /root/my.crt:/run/frpc/example.com.crt:ro \
       -v /root/my.key:/run/frpc/example.com.key:ro
    
    # 用 -mount
    docker run (其他参数) \
        --mount type=bind,src=/root/my.crt,dst=/run/frpc/example.com.crt,ro \
        --mount type=bind,src=/root/my.key,dst=/run/frpc/example.com.key,ro
    
  3. 找到工作目录后,从供应商处下载申请到的 SSL 证书:

    • 如果下载证书时有多种格式可选,请选择 nginx 格式,下载后应该得到一个 .key 和一个 .crt 文件
    • 如果下载到两个 .pem 文件,直接将其 重命名.key.crt 文件即可,注意不要搞反证书和私钥
    • 如果下载后有三个文件,说明证书链在独立文件(文件名通常有 _intermediate 字样)中,需要手动拼接:
      把证书链的内容复制出来,隔一个空行粘贴到 .crt 文件末尾即可,拼接后的 .crt 文件即可直接用于替换
  4. 如果刚才已启动过隧道测试,那么此时,在工作目录中就可以看到自签名证书了:

    • example.com.crt:自签名证书文件
    • example.com.key:自签名证书的私钥文件

    此时应先 确保隧道已关闭,随后用下载到的证书文件替换这两个文件。

  5. 重新启动隧道并尝试访问。如果您的配置步骤、申请的证书没有问题,那么将不再出现证书错误提示。

    注意

    如果您发现启动隧道后,frpc 工作目录中您替换的 SSL 证书重新被 frpc 替换为自签名证书,那么说明 frpc 未能解析您的 SSL 证书,请检查证书完整性、各文件是否正确。

访问认证配置 SSL 证书

frpc v0.42.0-sakura-3.1 及以上版本访问认证会遵循 自动 HTTPS 配置项的规则加载证书,参考 配置 frpc 的自动 HTTPS 功能 和上面的 配置 frpc 的 SSL 证书 即可。

对于 v0.42.0-sakura-3 及更低版本,您可以通过替换 frpc 工作目录下的 authpanel.<crt|key> 让访问认证加载对应的证书。