headscale使用自定义证书
Headscale使用自定义证书
在一些嵌入式设备中没有安装根证书,并且更新根证书比较麻烦,此时可以使用长时间的自定义证书。
生成自定义证书(特别是自签名证书)虽然技术上可行,但需要注意安全性和信任问题。自签名证书不会被浏览器或操作系统信任,会导致安全警告。以下是生成30年有效期证书的步骤和注意事项:
1. 生成证书的步骤
使用 OpenSSL 工具生成自签名证书(支持 SAN 扩展,兼容现代浏览器):
步骤 1:安装 OpenSSL
1 | # Ubuntu/Debian |
步骤 2:创建配置文件 openssl.cnf
1 | [ req ] |
步骤 3:生成私钥和证书
1 | openssl req -x509 -new -nodes -keyout example.com.key -sha256 \ |
-days 10950
:30年(30×365)- 输出文件:
example.com.key
(私钥)、example.com.crt
(证书)
3. 验证证书
1 | openssl x509 -in example.com.crt -text -noout |
检查有效期(Validity
)和域名(Subject Alternative Name
)。
4. 部署证书
- Web 服务器:将
example.com.key
和example.com.crt
配置到 Nginx/Apache。 - 强制 HTTPS:确保服务器配置了 HTTPS 重定向。
5. 客户端信任证书
Headscale 使用自定义证书时,Tailscale 连接登入会出现如下错误:Received error: fetch control key: Get "https://www.example.com/key?v=116": x509: certificate signed by unknown authority
。这是因为Tailscale 客户端默认要求服务器证书由受信任的证书颁发机构(CA)签发,例如 Let’s Encrypt。如果使用自签名证书或非 Let’s Encrypt 的证书,客户端会因无法验证证书链而拒绝连接。
步骤 1:确认证书安装位置
以管理员身份运行证书管理器
- 按
Win + R
,输入mmc
,回车。 - 点击 文件 → 添加/删除管理单元。
- 添加 证书 管理单元,选择 计算机账户 → 本地计算机。
- 按
检查证书是否已安装到
受信任的根证书颁发机构
- 在左侧导航栏展开
证书(本地计算机)
→受信任的根证书颁发机构
→证书
。 - 确认列表中存在
www.example.com
的证书(颁发者和使用者均为example.com Inc
)。
- 在左侧导航栏展开
若未找到证书,重新安装
- 右键
证书
→ 所有任务 → 导入。 - 使用向导导入
example.com.crt
,**在向导最后一步选择存储位置为受信任的根证书颁发机构
**。
- 右键
注意事项
证书安装位置错误
Windows 系统有多个证书存储区(如受信任的根证书颁发机构
、本地计算机
、当前用户
)。- 必须 将自签名证书安装到
受信任的根证书颁发机构
(Trusted Root Certification Authorities)。 - 若安装到其他位置(如
个人证书
或当前用户
存储),系统级服务(如 Tailscale 客户端)将无法信任该证书。
- 必须 将自签名证书安装到
证书未正确应用于系统级
Windows 的证书管理分为本地计算机
和当前用户
。- 如果以普通用户身份安装证书,仅当前用户有效,系统服务(如 Tailscale)可能无法访问。
- 需要以管理员权限运行证书管理工具,将证书安装到
本地计算机
的受信任的根证书颁发机构
。
证书文件内容问题
- 证书文件可能包含多个证书(如中间证书链),导致解析失败。
- 证书文件可能不是 PEM 格式(需确保内容以
-----BEGIN CERTIFICATE-----
开头)。