canterbury-air-patrol/flight-safety-system

GitHub: canterbury-air-patrol/flight-safety-system

用于无人机集群安全监控与控制的飞行安全系统

Stars: 0 | Forks: 1

# 飞行安全系统 [![C/C++ CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/bce3785e7f031910.svg)](https://github.com/canterbury-air-patrol/flight-safety-system/actions/workflows/c-cpp.yml) [![codecov](https://codecov.io/gh/canterbury-air-patrol/flight-safety-system/branch/develop/graph/badge.svg)](https://codecov.io/gh/canterbury-air-patrol/flight-safety-system) 飞行安全系统是一个用于维护无人机的控制系统。 FSS提供了一种向飞机发送基本命令(返回原点、暂停、恢复等)并在监控位置、电池状态和任务进度的同时的方法。 查看[CHANGELOG.md](CHANGELOG.md)以获取变更的完整历史记录。 ## 基本设置 ### 依赖项 依赖项包括jsoncpp(加载/读取配置)、gnutls/gnutlsxx(用于安全连接)、ecpg(用于服务器)和catch2(用于测试)。 从源代码构建还需要autoconf、automake和libtool来生成构建系统。 在Debian/Ubuntu上: ``` apt install autoconf automake libtool libjsoncpp-dev libgnutls28-dev libecpg-dev catch2 ``` ### 构建/安装 您可以从源代码构建此软件包: ``` git clone https://github.com/canterbury-air-patrol/flight-safety-system.git cd flight-safety-system ./autogen.sh ./configure --enable-server make make install ``` ### 运行服务器 飞行安全系统服务器使用[postgresql](https://www.postgresql.org/)+[postgis](https://postgis.net/)数据库来存储配置、命令和记录历史数据。 [web前端](https://github.com/canterbury-air-patrol/flight-safety-system-web/)是单独的项目,在运行服务器之前需要设置并连接到数据库。 创建一个[server.json](examples/server.json)文件,包含正确的端口和数据库设置。 然后启动服务器: ``` fss-server server.json ``` #### 信号处理 | 信号 | 影响 | |---------|--------| | SIGTERM | 优雅关闭 — 停止接受连接,清空写入队列,并干净地退出。与 `systemctl stop` 和 `docker stop` 兼容。 | | SIGINT | 与SIGTERM相同。 | | SIGHUP | 重新加载CRL文件(如果已配置)并断开任何当前连接的客户端,这些客户端的证书出现在更新的CRL上。无需重启。 | ### 客户端 飞行安全系统没有附带完整的客户端实现,但是有一个[库](src/fss-client-ssl.hpp)可以使用,以及一个[示例客户端](examples/fake_client.cpp)可以作为起点。 ## 冗余 可以通过运行多个独立的服务器来实现冗余;正常的客户端配置允许指定多个要连接的服务器。 每个服务器也可以配置为包含所有已知服务器的列表,并且这些信息定期提供给客户端,以便它们可以自动发现并连接到所有服务器。 ## SSL支持 TLS是保护客户端和服务器之间连接所必需的。需要一个共享的CA,以便客户端和服务器可以通过证书相互验证。服务器使用客户端证书的通用名称作为资产标识。 ### 生成证书 在`certs`目录中提供了脚本,以帮助生成和签名证书。 生成CA证书: ``` cd certs ./generate-ca.sh ``` 将`ca.private.pem`保存在安全的地方 — 它用于签名所有服务器和客户端证书。如果由该CA签名的证书被泄露,您需要撤销它(见下文)或重新创建CA并重新生成所有证书。 为每个服务器生成证书: ``` cd certs ./generate-server.sh server1.my.domain ``` 使用客户端将连接到的IP地址或DNS名称。客户端验证服务器是否受信任,并且它们是否连接到了正确的主机。 为每个客户端生成证书: ``` cd certs ./generate-client.sh client-name ``` 使用在数据库中注册的客户端名称。服务器将证书CN与资产注册表匹配以验证客户端。 ### 证书撤销(CRL) 要撤销证书而不替换CA,请将`crl_file`条目添加到`server.json`: ``` "ssl": { "ca_public_key": "certs/ca.public.pem", "server_private_key": "certs/server.private.pem", "server_public_key": "certs/server.public.pem", "crl_file": "certs/revoked.crl" } ``` 向正在运行的服务器发送`SIGHUP`以重新加载CRL并立即断开任何证书出现在其上的客户端的连接。无需重启。 ## 其他软件 主要设计飞行安全系统与[搜索管理地图](https://github.com/canterbury-air-patrol/search-management-map/)一起运行。 [Canterbury Air Patrol](http://www.canterburyairpatrol.org)有一个[客户端](https://github.com/canterbury-air-patrol/fss-smm-mav),它将飞行安全系统和搜索管理地图集成在一起,以控制运行[ArduPilot](https://www.ardupilot.org)的飞机。 有一个[ADS-B集成](https://github.com/canterbury-air-patrol/fss-adsb/),允许从ADS-B Out飞机转发位置报告到FSS客户端。 ## 发布策略 稳定版本是从长期存在的`release/X.Y`分支中切出的。`develop`分支承载着持续的工作,并在准备发布时合并到`release/X.Y`分支。首先将错误修复应用到`develop`分支,然后将其挑选到相关的`release/X.Y`分支,从而产生补丁版本(`X.Y.1`、`X.Y.2`等)。`master`分支始终指向最新的稳定版本。 简而言之: - `master` — 最新稳定版本 - `release/X.Y` — X.Y线的维护分支;所有X.Y.Z标签的来源 - `develop` — 下一个发布的集成分支 ## 许可证 本项目采用GNU GPLv2许可 — 请参阅[LICENSE](LICENSE.md)文件以获取详细信息。
标签:Catch2, C/C++, ECPG, GNUTLS, JSON, PostGIS, PostgreSQL, SIEM, UML, 事务性I/O, 信号处理, 地理信息系统, 安全可观测性, 安全通信, 客户端/服务器系统, 数据记录, 无人机安全, 测试用例, 版本控制, 自动化构建, 飞行控制系统