# 2026-04-15-oppi-tls-manual

## 决策

Oppi TLS 使用 manual 模式，指向已有的 Let's Encrypt 证书，而不是 self-signed 或 Tailscale。

## 背景

需要让 iPhone Oppi App 通过 HTTPS 连接 VPS，满足 Apple ATS 要求。

## 方案对比

方案 A：Tailscale 证书
→ 账户不支持 `tailscale cert`，直接排除。

方案 B：self-signed + cert pin
→ Oppi 生成自签证书，invite 带 fingerprint，app 做 pin 验证。
→ 问题：nginx 和 Oppi 使用不同证书，pin 不匹配。

方案 C：manual TLS + Let's Encrypt（选择）
→ Oppi 直接使用 Let's Encrypt 证书（已有）。
→ Nginx 和 Oppi 同一张证书，fingerprint 一致。
→ ATS 满足（CA 签发），pin 匹配。

## 选择理由

复用已有 Let's Encrypt 证书，零额外成本，证书自动续签，ATS 完全满足。

## 不选择其他方案的原因

Tailscale 账户限制，self-signed pin 不匹配问题无法简单解决。

## 后续影响

Oppi 进程需要读取 `/etc/letsencrypt/live/` 下的证书文件（root 权限，无问题）。
Let's Encrypt 证书每 90 天续签，Certbot 自动处理，Oppi 重启后会读新证书。
