Courier 走 HTTPS,但你从来不需要生成、购买或安装证书。服务第一次启动时会自己向 Let’s Encrypt 申请一张,之后也会自己续期。
服务启动时发生了什么
Section titled “服务启动时发生了什么”- 服务先看服务目录之外的
~/.courier-tls里有没有证书。没有的话,它不会打开同步端口——那时客户端 只会看到连接被拒绝。 - 它向 Let’s Encrypt(免费、公共的证书机构)申请一张证书,名字就是你在应用里填的地址:服务器的 公网 IP,或指向它的域名。
- Let’s Encrypt 会通过 80 端口取一个小文件,来证明这个地址确实属于这台服务器。服务只在申请 期间临时监听 80。
- 证书签发下来,同步端口才开始监听,应用里的检查随之变绿。第一次签发通常只要几秒;跨境网络慢的 时候可能要一两分钟。
除此之外不需要配置任何东西:没有邮箱、没有 DNS 记录、也不用上传证书文件。
服务器需要满足的条件
Section titled “服务器需要满足的条件”- 一个公网地址。 证书是给「你填的那个地址」签的。
localhost、局域网地址、私有 IP 都申请不到。 - 公网能访问 80 端口。 Let’s Encrypt 是从它自己的网络来验证的,不是从你的电脑,所以云安全组
要放行所有来源(
0.0.0.0/0),并且 80 上不能有别的程序。服务只在申请和续期时占用 80。 - 服务器能出网访问 Let’s Encrypt。 申请证书是服务器自己发起 HTTPS 请求,所以它要能正常出网
访问 443(
acme-v02.api.letsencrypt.org)。这不是一个要对公网开放的端口:云服务器出方向默认 放行,只有特别严格的出站防火墙才需要额外允许;国内网络有时会比较慢,可以用curl -I https://acme-v02.api.letsencrypt.org/directory确认。
一句话:入方向只放 80(仅用于证书验证)和服务端口(默认 8443,给 Obsidian 和 CLI);上面那个 443 是出方向,不是第三条入方向规则。
桌面端部署时会检查这些端口,检查不通过时会说明是哪一步没过。
证书有效期很短:大约六天。服务每六小时检查一次,在还剩大约三天时自动续期。续期用的是同一套 80 端口验证,全程在后台完成,不需要你操作;但服务要保持运行,80 端口的规则也要一直留着。
限制和常见问题
Section titled “限制和常见问题”- Let’s Encrypt 的签发限流。 同一个地址一周最多签发 5 张证书。删除服务再重新部署不会重置 这个额度。部署好之后就别反复重来;证书还在有效期内会直接复用。真的撞上限流,服务会在窗口过去后 自己重试,应用里也会写明原因。
- 换了地址就要换证书。 服务器的公网 IP 变了,重新部署一次即可;服务发现证书是给旧地址的,会 自动申请新的。
- 80 要一直空着。 80 上有代理或别的 Web 服务,签发和续期都会失败;地址本身从外网不可达(没有
端口映射的 NAT、
localhost)则根本无法验证。 - 不支持自带证书。 Courier 只用服务为自己的地址申请的那张证书,没有上传证书或自定义 CA 的入口。
证书确实拿不到的时候
Section titled “证书确实拿不到的时候”有些网络就是拿不到证书:地址从公网到不了 80、服务器出网被限制,或者这个地址正卡在 Let’s Encrypt 的每周限流里。如果你接受这个代价,部署对话框里有一个默认不勾选的复选框——证书签发失败时 改用 HTTP 部署,旁边直接写着代价:HTTP 下服务器与设备之间的流量不加密,能抓包的人 可以拿到你的用户密钥,从而读取和改写这个库。
只在你确实需要一个能用的服务、并且网络可信的时候勾选。部署仍然先走 HTTPS,只有服务自己记录了
失败的签发时才会切到 HTTP。之后应用里显示的服务地址会变成 http://,部署对话框会用一条说明告诉你
HTTPS 为什么没成,设备那边也要用 http:// 的地址;等你重新部署并取消勾选、证书也能签下来时,
就会回到 HTTPS。
升级服务端程序不会改变当前方式,迁移到新服务器也一样:HTTP 的部署升级/迁移后 仍是 HTTP,HTTPS 的会在新地址上申请自己的新证书。要切换方式,始终是在部署对话框里重新部署一次。
删除服务会删掉数据库、blob、日志和二进制,但证书和它的密钥在服务目录之外(~/.courier-tls),
不会被删掉。再部署到同一地址时可以直接复用,不会占用每周的签发额度。如果重新部署时证书已经快过期
或已经过期,服务启动时会自动申请一张新的。
HTTPS 不是库加密
Section titled “HTTPS 不是库加密”HTTPS 保护的是「设备到服务器」这一段连接:让传输内容不可读,也证明你连到的就是自己的服务器。 库里的内容是在设备上加密之后才发出去的,服务器存的始终是密文。两者是分开的,见 端到端加密。
证书一直下不来怎么办
Section titled “证书一直下不来怎么办”部署对话框和服务状态页会显示最近一次尝试和原因,服务也会自己重试(第一次 10 分钟后,之后逐渐拉长)。
最常见的原因就是公网到 80 不通,以及上面说的每周限流。服务器上 ~/.courier-tls/last-issuance.txt
记录着最近一次的结果。