# 服务证书

```{attention}
本章节的服务证书与 [安装中间人证书](./install-mitm-cert.md) 章节中所述的中间人抓包证书用途不同，请注意区分，后者安装于 Android 系统信任区，用于使应用信任代理以完成流量拦截。服务证书为 PEM 格式文件，由 FIRERPA 服务端加载、客户端持有，用于加密 FIRERPA 通信链路并校验访问者身份。
```

本章介绍 FIRERPA 服务证书的生成与部署。FIRERPA 服务端默认未启用身份认证，同一网络内任何知晓设备 IP 与端口的访问者均可连接远程桌面、调用 API 或使用 SSH。如您需要在不可信网络环境中使用或需对通信进行 TLS 加密时，应通过服务证书启用访问控制。

```{note}
通过 APP 安装服务端时，可在 APP 的**配置**中启用认证，APP 将自动生成并设置证书，无需执行下文生成流程。采用 Magisk 模块或手动部署，需要按照本章步骤生成并手动进行部署。
```

生成证书前，须在 PC 端完成 [工具准备](./tools-prepare.md)，克隆 `lamda` 仓库并在 `tools` 目录安装 Python 依赖。于 `tools` 目录执行 `cert.py`，将参数替换为访问设备时使用的主机名。

```bash
python3 cert.py mydevice.local
```

执行成功后，当前目录将生成 `mydevice.local.pem` 以及 `root.crt`、`root.key`。`.pem` 文件供服务端启用 TLS 及客户端完成身份校验，`root.crt` 与 `root.key` 为根证书密钥对，通常不参与日常连接，但应妥善保管以供后续更换或故障排查。
<br>
<br>
生成的 PEM 文件首行为元数据注释，其中 `PASSWD` 字段值为默认远程桌面登录凭据。请勿手动编辑 PEM 文件中的私钥或证书内容，否则可能导致服务端启动失败或客户端校验异常。证书文件格式如下，每个块依次为 `key`, `cert`, `CA` 且必须严格遵循该顺序。

```text
LAMDA SSL CERTIFICATE (CN=mydevice.local,PASSWD=e908d358...)
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA33YUKkfUkLeWtsCe7A1yzIZsqOTd1a8XWr9+Vh0ombOdtnqK...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIC1DCCAbygAwIBAgIQBKjY0w1FbPJooD5mJ1CWwDANBgkqhkiG9w0BAQsFADAz...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDAzCCAeugAwIBAgIQR9OCJbQGGQT5Pgp7PmLrDTANBgkqhkiG9w0BAQsFADAz...
-----END CERTIFICATE-----
```

证书生成后，还需要配置 FIRERPA 服务端在启动时加载该证书，访问控制方可生效。Magisk 部署可将 PEM 重命名为 `lamda.pem` 并按 [安装服务端](./install-server.md) Magisk 章节说明置入模块包。配置生效并重启服务后，远程桌面、API 及配套工具方按 HTTPS 与证书要求运行。
<br>
<br>
手动安装则可以通过在 `launch.sh` 后面加上命令行参数 `--certificate=/path/to/lamda.pem` 来传递证书，也可以通过在[服务配置](./properties.md)中设置 `cert` 配置项来使用。

```{note}
启用服务证书后，[远程桌面](./remote-desktop.md) 须使用 https:// 协议访问，并且需要在 WebUI 中输入上述密码，您也可以通过 [服务配置](./properties.md) 中的 ssl-web-credential 项设置备用登录密码。Python 客户端连接时在 Device 构造函数中指定 PEM 路径（参见 [API 准备](./api-prepare.md)）。tools 目录下命令行工具通过 CERTIFICATE 环境变量指定路径（参见 [工具准备](./tools-prepare.md)）。
```

