可信 HTTPS
用免费域名,让车机打开网页时不再出现证书警告。中继把自己的地址登记到你的免费域名下,再为这个域名申请 Let's Encrypt 证书;车机浏览器用这个域名打开网页,证书就能通过验证。车机上不用安装任何软件,也不用改任何设置。
工作原理
浏览器信任一张证书,需要同时满足两个条件:证书由公共证书机构签发,证书上的域名和地址栏里的一致。中继自己生成的证书不是公共机构签发的,用 IP 地址打开时也没有域名可以核对,所以浏览器会警告(见证书警告)。开启可信 HTTPS 后,中继会自动完成三件事:
- 登记地址:把中继在车机网络中的私有地址(例如
192.168.43.20)登记为你的域名的地址。地址变化时,例如安卓热点重新开启后,中继会重新登记。 - 申请证书:通过服务商的接口在域名下临时添加一条验证记录,向 Let's Encrypt 证明这个域名由你控制,然后取得证书。证书到期前,中继会自动续期。
- 提供网页:车机浏览器用
https://<你的域名>:8443/打开网页时,中继出示这张证书。
验证只在中继、服务商和 Let's Encrypt 之间进行,不需要从互联网访问中继,中继的网页仍然只能在车机网络中打开。这项功能默认关闭;不开启时,中继和以前完全一样。
准备工作
| 需要准备 | 说明 |
|---|---|
| 一个免费域名 | 在 DuckDNS 或 dynv6 注册,见第 1 步。注册后要记下完整域名和 Token。 |
| 支持可信 HTTPS 的中继 | 安卓应用 0.1.5 及以上版本,或 Linux 中继 0.1.6 及以上版本。 |
| 中继能上网 | 登记地址、申请和续期证书都要联网。安卓中继需要打开移动数据。 |
为什么安卓中继需要移动数据?
车机要先查到域名对应的地址,才能打开网页。车机连着中继手机的热点时,是通过中继手机来查的,中继手机不能上网就查不到。车机连着自己的热点或共用 Wi-Fi 时,由那个网络来查,那个网络也需要能上网。Linux 中继开着自己的热点时不受这个限制:它会在热点里直接回答这个域名,车机不联网也能查到。另外,安卓热点每次开启时地址都可能变化,中继要联网才能把新地址登记到域名下。
多久需要联网一次?
证书会过期:Let's Encrypt 的证书最长只能用几个月,而且有效期还在缩短。中继会提前自动续期,但只能在联网时进行,所以至少每隔几周要让中继联一次网。证书过期后,浏览器会重新显示警告;用 IP 地址打开仍然可以,和以前一样。
注册免费域名
请专门为中继注册一个新域名。中继会改写域名的地址,所以不要使用已经用在别处的域名,例如用来从外面访问家里设备的域名。每台中继要用各自的域名,否则它们会互相覆盖地址。域名会被公开,起名时请避开能认出你的信息,见隐私。
两家服务商都免费,中继都支持:
| 服务商 | 域名示例 | 注册方式 | Token 能管理什么 |
|---|---|---|---|
| DuckDNS | myrelay.duckdns.org | 用 GitHub、Google、Reddit 或 X(Twitter)账号登录,不用另设密码 | 整个账号下的所有域名 |
| dynv6 | myrelay.dynv6.net | 邮箱和密码 | 整个账号,或只限一个 zone(域名) |
建议:有 GitHub 账号就选 DuckDNS,步骤最少;没有的话选 dynv6,用邮箱就能注册,Token 也可以只限于这一个域名。
DuckDNS:注册步骤
- 用 GitHub 账号登录 DuckDNS。在电脑或手机的浏览器中打开 duckdns.org,选择 GitHub 登录;也可以用 Google、Reddit 或 X 登录,但在中国大陆通常用不了。
- 添加一个域名。在以
.duckdns.org结尾的输入框中填一个名字,例如myrelay,然后添加。添加成功后,列表中会出现myrelay.duckdns.org。它现在指向的地址不用管,中继会自动更新。 - 在页面顶部找到 token,形如
a1b2c3d4-0000-0000-0000-000000000000,这就是要填进中继的 Token。
要保存的信息:完整域名,例如 myrelay.duckdns.org(不只是 myrelay),以及 Token。DuckDNS 的 Token 可以修改账号下的所有域名,请像密码一样保管,见保管好 Token。
dynv6:注册步骤
- 注册 dynv6 账号。在 dynv6.com 点“Sign up”,填写邮箱和密码(至少 8 个字符),再点确认邮件中的链接。
- 新建一个 zone(dynv6 对域名的叫法)。登录后填一个名字,后缀选择
dynv6.net,例如myrelay.dynv6.net。不要选其他后缀,原因见下一项。 - 取得 HTTP Token。打开 Keys 页面(dynv6.com/keys),新建或复制一个 HTTP Token,建议把它限定为只能管理这个 zone。
要保存的信息:完整域名,例如 myrelay.dynv6.net,以及 HTTP Token。
为什么 dynv6 要选 dynv6.net?
dynv6 还提供其他后缀,但只有 dynv6.net 在公共后缀列表(Public Suffix List)中。Let's Encrypt 按这个列表计算每周可以签发的证书数量:用 dynv6.net 时,你的域名单独计算;用其他后缀时,要和这个后缀下的所有用户共用同一个配额,申请很容易失败。
在中国大陆能用吗?
2026 年 10 月 20 日实测:DuckDNS 在家庭宽带和中国联通移动数据下,接口和域名都能正常使用,登录方式中只有 GitHub 比较可行;dynv6 在同一次实测中接口可以访问,注册时要选择 dynv6.net 后缀。
保管好 Token
Token 相当于域名的密码:拿到它的人可以把你的域名指向别的地址。
- 把 Token 存在密码管理器里。不要发到聊天群,也不要截图分享设置页面或配置文件。
- Token 只保存在中继上。填好后,应用和管理页面只显示“已保存 Token”,不会再显示 Token 本身。
- 用配置文件导入后,删除手机上的那个文件。
如果 Token 泄露了,到服务商那里换一个新的,再把新 Token 填进中继(或重新导入配置文件):
| 服务商 | 怎样换 Token |
|---|---|
| DuckDNS | 在账号页面,点登录邮箱旁边的三条横线,再点“recreate token”。新 Token 适用于账号下的所有域名。 |
| dynv6 | 在 Keys 页面删除旧的 HTTP Token,再新建一个。 |
在中继上设置
按你的中继选择一种方式,效果相同。证书由 Let's Encrypt 免费签发,申请前需要同意它的订户协议:中继不会替你同意,没有同意时也不会申请证书。中继在 Let's Encrypt 注册账号时,不会提供邮箱等联系方式。
安卓中继:在应用中填写
- 打开 OpenXPlay Relay,进入“设置 → 车机访问 → 可信 HTTPS”。
- 打开“使用免费域名”。
- 在“域名服务商”中选择 DuckDNS 或 dynv6。下面会显示这个服务商的注册方法,以及服务商官网和本教程的链接。每个服务商的域名和 Token 分开保存,切换服务商时会显示对应服务商已保存的内容。
- 在“域名”中填写完整域名。例如
myrelay.duckdns.org,不能只填myrelay。 - 在“Token”中粘贴服务商的 Token。保存后,这里只显示“已保存 Token”;以后留空就会保留原来的 Token。
- 勾选“我同意 Let's Encrypt 订户协议”。
- 点“保存”。状态行会先后显示“正在更新域名地址…”、“正在申请证书…”,成功后显示“已就绪:…(证书有效期至 …)”。
安卓中继:导入配置文件
不想在手机上输入长长的 Token 时,可以在电脑上写好配置文件再导入。
- 在电脑上写好配置文件。用文本编辑器新建一个文件,例如
public-name.json,按配置文件格式填写,保存为 UTF-8 纯文本。 - 用 USB 数据线把文件复制到中继手机上,例如“下载”(Download)文件夹;也可以直接在手机上用文本编辑应用新建这个文件。文件里有 Token,最好不要通过聊天软件或网盘传送。
- 在“设置 → 车机访问 → 可信 HTTPS”中,点服务商卡片最下方的“导入配置文件”,在文件选择器中选中这个文件。
- 导入成功后,应用只显示服务商和域名,并切换到文件中的服务商,设置立即生效。文件有错误时,应用会指出是哪一项出了问题。
- 删除手机上的这个文件。
导入的文件没有写 "enabled": false 时,相当于打开了“使用免费域名”。
Linux 中继:在管理页面中填写
- 打开管理页面并登录。在连入中继网络的手机或电脑上打开管理页面,例如
https://openxplay-admin.local:6975;连接中继的热点时是https://openxplay-car.local:6975。 - 打开“设置”,找到“可信 HTTPS”。
- 打开“使用免费域名”,选择“域名服务商”,填写“域名”和“Token”,再勾选“我同意 Let's Encrypt 订户协议”。每一项都会单独保存,页面会显示“已保存”。
- 等状态行显示“已就绪:…(证书有效期至 …)”,就可以在车机上打开。需要时可以点“立即申请证书”。
Token 保存后不会再显示;以后留空就会保留原来的 Token。
Linux 中继:编辑配置文件
管理页面的这些设置保存在 /var/lib/openxplay/public-name.json 中。你也可以直接写这个文件,格式见配置文件格式:
在电脑上写好文件,复制到中继上。例如复制到
/root/public-name.json。以 root 身份把它放进中继的状态目录,设为只有 root 可以读写(权限 0600),然后删除副本:
shinstall -o root -g root -m 0600 /root/public-name.json /var/lib/openxplay/public-name.json rm /root/public-name.json中继每隔几秒检查一次这个文件,改动后会自动重新读取,不需要重启。然后在管理页面中查看状态。
这个文件和 settings.json 是分开的,不要把这些设置写进 settings.json。
配置文件格式
安卓中继导入的文件和 Linux 中继的 /var/lib/openxplay/public-name.json 格式相同,都是一个 JSON 对象:
| 键 | 必填 | 说明 |
|---|---|---|
version | 是 | 固定为 1。 |
enabled | 否 | true 为开启(默认),false 为关闭。 |
provider | 是 | duckdns 或 dynv6。 |
name | 是 | 完整域名,末尾不加点,大小写均可。DuckDNS 必须是 <名字>.duckdns.org;dynv6 填 Token 所管理的域名,通常是 <名字>.dynv6.net。 |
token | 是 | 服务商的 Token,不含空格。DuckDNS 的 Token 形如 a1b2c3d4-0000-0000-0000-000000000000。 |
agreeLetsEncryptTerms | 是 | 设为 true,表示你同意 Let's Encrypt 订户协议。没有同意时,中继不会申请证书。 |
acme | 否 | production(默认)。staging 只用于测试,这样申请的证书不受浏览器信任。 |
- 文件中不能有表里没有的键:拼错的键会报错,并指出是哪一个。
- 文件最大 16 KiB。
每个服务商一个例子,把域名和 Token 换成你自己的:
{
"version": 1,
"enabled": true,
"provider": "duckdns",
"name": "myrelay.duckdns.org",
"token": "a1b2c3d4-0000-0000-0000-000000000000",
"agreeLetsEncryptTerms": true
}{
"version": 1,
"enabled": true,
"provider": "dynv6",
"name": "myrelay.dynv6.net",
"token": "your-dynv6-token",
"agreeLetsEncryptTerms": true
}在车机上打开
- 等状态行显示“已就绪:…(证书有效期至 …)”。第一次申请证书通常需要一两分钟。
- 在车机浏览器中用域名打开网页。地址由
https://、你的域名和:8443/组成,例如https://myrelay.duckdns.org:8443/。准备就绪后,中继列出的车机地址中,排在最前面的就是这个地址。 - 页面会直接打开,不再出现证书警告。把它加入书签,替换原来用 IP 地址的书签。
原来的 IP 地址(例如 https://192.168.43.20:8443/)仍然可以使用,作为备用。用它打开时还会出现证书警告,警告中也可能提示证书属于另一个域名,这是正常的。
- 证书申请成功或续期时,不用结束 CarPlay:已经打开的车机网页不会断开,之后新打开的页面使用新证书。
- 管理页面也使用同一张证书:把管理页面地址中的 IP 地址或
.local名称换成你的域名,打开时同样不会再有警告。
状态信息
应用和管理页面中的状态行会显示下面这些信息:
| 状态 | 含义 | 怎么办 |
|---|---|---|
| “未开启” | 没有打开“使用免费域名”。 | 需要时打开它。 |
| “请填写域名服务商、域名和 Token,并同意协议。” | 还缺某一项,或者没有勾选协议。 | 补全设置。 |
| “等待联网” | 中继不能上网;Linux 中继的时钟还没有同步时也会显示这个状态。 | 安卓中继打开移动数据;Linux 中继连接能上网的网络。联网(时钟同步)后中继会自动重试。 |
| “正在更新域名地址…” | 正在把中继的地址登记到域名下。 | 稍等。 |
| “正在申请证书…” | 正在向 Let's Encrypt 申请证书。 | 稍等,通常需要一两分钟。 |
| “已就绪:…(证书有效期至 …)” | 证书有效,域名指向中继当前的地址。 | 用域名打开车机网页。 |
| “出现问题:…。将于 … 重试。” | 出了错。冒号后面是原因,最后是下次自动重试的时间。 | 见下方“出现问题时的原因”。 |
出现问题时的原因
| 原因 | 说明和处理 |
|---|---|
| “服务商拒绝了这个 Token” | Token 不对或已经失效,见服务商拒绝了 Token。 |
| “服务商找不到这个域名” | 域名拼错了,或者不在所选服务商的这个账号下。填写完整域名,例如 myrelay.duckdns.org,并确认“域名服务商”选对了。 |
| “服务商要求稍后再试” | 请求太频繁。不用处理,中继会在显示的时间重试。 |
| “无法连接服务商” | 中继没有网络,或者连不上服务商。检查中继能否上网;服务商临时故障时,中继会自动重试。 |
| “服务商的域名服务器未及时生效” | 验证记录没有及时出现在服务商的域名服务器上,通常是服务商暂时较慢。中继会自动重试,也可以稍后点“立即申请证书”。 |
| “Let's Encrypt 拒绝了请求:…” | 冒号后面是 Let's Encrypt 给出的原因。检查域名和 Token;如果一直出现,请把这条信息发到交流群。 |
| “Let's Encrypt 要求稍后再试” | 达到了 Let's Encrypt 的次数限制。等到显示的时间,见要求稍后再试。 |
| “还没有车机网络地址” | 中继还没有连上车机所在的网络,没有可以登记的地址。按教程中的连接车机网络连接车机网络。 |
遇到网络或服务商的问题时,中继会自动重试,间隔逐渐拉长:1 分钟、5 分钟、30 分钟、2 小时、6 小时,之后每天一次。中继的地址或设置变化后,会重新从 1 分钟开始。想马上再试,可以点“立即申请证书”。
故障排查
用域名打不开网页
先确认状态行显示的是“已就绪”,地址以 https:// 开头,并带有 :8443。然后检查:
- 中继不能上网。 车机连着安卓中继的热点时,要通过中继手机查询域名。打开中继手机的移动数据;暂时没有网络时,先用 IP 地址打开。Linux 中继开着自己的热点时,会在热点里直接回答这个域名,不需要联网。
- 地址刚刚变过。 热点重新开启后,地址可能会变,中继要先登记新地址。等状态行重新显示“已就绪”,稍等片刻再刷新车机网页。
- 路由器拦截了私有地址。 使用共用 Wi-Fi 时,有些路由器开启了“DNS 重绑定保护”(DNS rebinding protection),会丢弃指向私有地址的查询结果。在路由器中为你的域名设置例外,或者关闭这项保护;不行就改用 IP 地址。
- DNS 过滤。 中继手机或车机如果使用了带过滤功能的 DNS 或广告拦截应用,也可能丢弃这类结果。换一个 DNS,或者暂时关闭过滤再试。
服务商拒绝了 Token
- 重新复制 Token,注意不要多出空格,也不要漏掉字符。
- 确认 Token 和域名属于同一个账号,并且“域名服务商”选对了。
- DuckDNS:重新生成过 Token 后,旧的就不能用了,请填入新 Token。
- dynv6:Token 限定了 zone 时,确认限定的就是这个域名。
要求稍后再试
服务商和 Let's Encrypt 都限制请求次数。出现“服务商要求稍后再试”或“Let's Encrypt 要求稍后再试”时,不用做任何操作,中继会在显示的时间自动重试。
- Let's Encrypt 为同一个域名每 7 天最多签发 5 张证书,同一个域名每小时最多允许 5 次验证失败(2026 年 10 月的规则)。中继按 Let's Encrypt 建议的时间续期时,不受这些限制。
- 不要反复“移除”再重新设置。移除会删除证书,每次重新设置都要申请一张新证书,很快就会用完这个配额。
- 中继自己也会控制次数:同一个域名每 24 小时最多申请 3 次新证书;已有的证书离到期还有 7 天以上、又没到续期时间时,不会重新申请。
用域名打开仍有证书警告
- 确认地址中用的是域名,而不是 IP 地址。
- 确认状态行显示的是“已就绪”。证书就绪前打开的车机网页仍在用原来的连接,用域名重新打开即可。
- 检查车机的日期和时间。时间相差太多时,浏览器会认为证书还没生效或已经过期。
- 车机的系统或浏览器很旧时,可能不信任 Let's Encrypt 的证书,这时只能继续用 IP 地址打开。
隐私
- 域名会公开。 Let's Encrypt 签发的每张证书都会记入公开的证书透明度(Certificate Transparency)日志,任何人都能查到你的域名。
- 私有地址也会公开。 任何人查询这个域名,都能看到中继登记的地址,例如
192.168.43.20。这是车机网络内部的地址,从互联网上访问不到,但谁都能看到它。 - 起一个认不出你的名字。 不要用姓名、车牌号、手机号等信息,最好用一串随机的字母和数字,例如
k7m2q9x4.duckdns.org。 - 服务商知道你的账号。 DuckDNS 知道你登录用的 GitHub 等账号,dynv6 知道你的邮箱。中继更新地址和申请证书时,服务商和 Let's Encrypt 会看到中继上网用的公网地址。
- Token 只保存在中继上,见保管好 Token。
关闭或移除
- 关闭:关掉“使用免费域名”后,中继停止所有请求,只使用自己生成的证书,车机浏览器会重新显示证书警告。Linux 中继也可以在配置文件中写
"enabled": false。 - 移除:在安卓应用或 Linux 中继的管理页面中点“移除”并确认,会删除设置、Token、证书和相关密钥。在 Linux 中继上直接删除
/var/lib/openxplay/public-name.json效果相同。 - 这两种方式都不会改动服务商那边的域名,它仍然指向最后登记的地址。不再需要时,可以到服务商网站删除域名。
