libressl/portable
GitHub: libressl/portable
LibreSSL 便携版是 OpenBSD 项目的 OpenSSL 分支的可移植构建框架,旨在为多种操作系统提供更安全、更现代化的 SSL/TLS 加密库替代方案。
Stars: 1480 | Forks: 292

## [LibreSSL](https://www.libressl.org) 官方便携版
[](https://github.com/libressl/portable/actions/workflows/linux.yml)
[](https://github.com/libressl/portable/actions/workflows/macos.yml)
[](https://github.com/libressl/portable/actions/workflows/windows.yml)
[](https://github.com/libressl/portable/actions/workflows/android.yml)
[](https://github.com/libressl/portable/actions/workflows/solaris.yml)
[](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:libressl)
LibreSSL 是由
[OpenBSD](https://www.openbsd.org) 项目开发的 [OpenSSL](https://www.openssl.org) 1.0.1g 的一个分支。我们的目标是现代化代码库,
提高安全性,并应用 OpenBSD 的最佳实践开发流程。
## 与 OpenSSL 的兼容性
LibreSSL 提供了 OpenSSL 1.1 API 的绝大部分功能。目前不支持 OpenSSL 3 API。由于这两个项目的发展目标和侧重点不同,它们之间存在不可避免的不兼容性。如果可能,并且只要不会对 LibreSSL 追求简单、安全和理智的目标造成太大的损害,我们就会解决重要的不兼容问题。如果没有充分的理由,我们不会添加新的功能、加密算法和 API,并且要求新代码必须是干净且高质量的。
LibreSSL 与任何版本的 OpenSSL,甚至是早期版本的 LibreSSL 在 ABI 上都是不兼容的。为了使用它,你需要将你的程序重新链接到 LibreSSL,就像在 OpenSSL 的主要版本之间迁移一样。
LibreSSL 安装库的版本号会随着 ABI 和 API 的变化而递增。
## 与其他操作系统的兼容性
虽然主要是在 OpenBSD 上开发并利用其可用的 API,但 LibreSSL 便携版项目致力于为其他操作系统提供可用的替代方案,并在可能的情况下协助改进操作系统原生的实现。
在撰写本文时,已知 LibreSSL 可以在以下平台上构建和运行:
* Linux(建议使用内核 3.17 或更高版本)
* FreeBSD(在 9.2 及更高版本上测试通过)
* NetBSD(建议使用 7.0 或更高版本)
* HP-UX (11i)
* Solaris 11 及更高版本
* Mac OS X(在 10.8 及更高版本上测试通过)
* AIX(5.3 及更高版本)
* Emscripten(3.1.44 及更高版本)
LibreSSL 还支持以下 Windows 环境:
* Microsoft Windows(Windows 7 / Windows Server 2008r2 或更高版本,x86 和 x64)
* Wine(32 位和 64 位)
* MinGW-w64、Cygwin 和 Visual Studio
官方发布的压缩包可在你友好的周边
OpenBSD 镜像站点的
[LibreSSL](https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/) 目录中找到,
不过我们建议你使用[镜像](https://www.openbsd.org/ftp.html)。
LibreSSL 便携版的构建框架也
在 GitHub 上有[镜像](https://github.com/libressl/portable)。
请将错误报告发送至公开的 libressl@openbsd.org 邮件列表,
或发送至 GitHub 的
[问题追踪器](https://github.com/libressl/portable/issues)
严重的漏洞或需要与 OpenSSL 协调的 bug 可以发送给核心团队,邮箱是 libressl-security@openbsd.org。
# 构建 LibreSSL
## 从 Git checkout 构建
如果你是使用 Git checkout 获取的源码,或者从 GitHub 下载了源码压缩包,请按照以下初始步骤准备源码树进行构建。_注意:如果不遵循这些说明,构建将会失败!
如果你无法遵循这些说明或无法满足这些先决条件,
请从 https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/ 下载官方发布版本。
如果你不是开发者,强烈建议使用官方发布版本。_
1. 确保你拥有 bash shell。这在 Windows 上也是必需的。
2. 确保你已安装以下软件包:
automake、autoconf、git、libtool、perl。
3. 运行 `./autogen.sh` 准备源码树进行构建。
## 使用 configure 的构建步骤
准备好源码树后,运行以下命令进行构建和安装:
```
./configure # see ./configure --help for configuration options
make check # runs builtin unit tests
make install # set DESTDIR= to install to an alternate location
```
或者,你可以运行 `./dist.sh` 来准备一个压缩包。
## 使用 CMake 的构建步骤
准备好源码树后,运行以下命令进行构建和安装:
```
mkdir build
cd build
cmake ..
make
make test
```
为了加快构建速度,你可以使用 Ninja:
```
mkdir build-ninja
cd build-ninja
cmake -G"Ninja" ..
ninja
ninja test
```
或者使用其他受支持的构建系统,如 Visual Studio:
```
mkdir build-vs2022
cd build-vs2022
cmake -G"Visual Studio 17 2022" ..
```
#### 其他 CMake 选项
| 选项名称 | 默认值 | 描述 |
|-------------------------|--------:|-----------------------------------------------------------------------------------------------------------------|
| `LIBRESSL_SKIP_INSTALL` | `OFF` | 允许跳过 install() 规则。可以通过命令行使用
```-DLIBRESSL_SKIP_INSTALL=ON``` 指定 | | `LIBRESSL_APPS` | `ON` | 允许跳过应用程序构建。运行测试需要用到 App | | `LIBRESSL_TESTS` | `ON` | 允许跳过测试。测试仅在静态构建中可用 | | `BUILD_SHARED_LIBS` | `OFF` | 用于构建共享库的 CMake 选项。 | | `ENABLE_ASM` | `ON` | 构建汇编优化规则。 | | `ENABLE_EXTRATESTS` | `OFF` | 启用额外的测试,这些测试在某些平台上可能不可靠 | | `ENABLE_NC` | `OFF` | 启用支持 TLS 的 nc(1) 的安装 | | `OPENSSLDIR` | 空 | 设置默认的 openssl 目录。可以通过命令行使用
```-DOPENSSLDIR=``` 指定 |
## 特定系统的构建信息
### HP-UX (11i)
在运行 `configure` 之前,将 UNIX_STD 环境变量设置为 `2003`,
以便使用 HP C/aC++ 编译器进行构建。有关更多详细信息,请参阅 "standards(5)" 手册页。
```
export UNIX_STD=2003
./configure
make
```
### MinGW-w64 - Windows
LibreSSL 需要在相对较新版本的 [MinGW-w64](https://www.mingw-w64.org/) 上构建,不要与最初的 mingw.org 项目混淆。
MinGW-w64 3.2 或更高版本应该可以使用。有关更多信息,请参阅 [README.mingw.md](README.mingw.md)。
### Emscripten
在配置 LibreSSL 以供 Emscripten 使用时,请确保在你的 `cmake` 配置命令前加上
`emcmake`。配置完成后,你可以继续使用常用的 `cmake` 命令。例如:
```
emcmake cmake . -Bbuild
cmake --build build --config Release
ctest --test-dir build -C Release --output-on-failure
```
# 使用 LibreSSL
## CMake
在你的项目根目录(即主 `CMakeLists.txt` 文件所在的位置)中创建一个名为 CMake 的新文件夹。
将 `FindLibreSSL.cmake` 文件复制到该文件夹中,并将以下行添加到你的主 `CMakeLists.txt` 中:
```
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
```
在你的 `CMakeLists.txt` 文件中的 `add_executable` 或 `add_library` 行之后,
添加以下内容:
```
find_package(LibreSSL REQUIRED)
```
它会告诉 CMake 去寻找 LibreSSL,如果找到,你将可以在你的 `CMakeLists.txt` 文件中
使用以下 3 个接口:
* LibreSSL::Crypto
* LibreSSL::SSL
* LibreSSL::TLS
例如,如果你想在测试程序中使用 LibreSSL TLS 库,
请像这样包含它(TLS 需要 SSL 和 Crypto,因此它们也会被自动包含):
```
target_link_libraries(test LibreSSL::TLS)
```
完整示例:
```
cmake_minimum_required(VERSION 3.10.0)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}")
project(test)
add_executable(test Main.cpp)
find_package(LibreSSL REQUIRED)
target_link_libraries(test LibreSSL::TLS)
```
#### Linux
按照上述章节中的指南,使用 make 编译 LibreSSL 并运行 `sudo make install`,会将 LibreSSL 安装到 `/usr/local/` 文件夹中,
并且 find_package 会自动找到它。如果你的系统将其安装到其他位置,或者你手动将它们放在了不同的位置,
你可以将 CMake 变量 `LIBRESSL_ROOT_DIR` 设置为正确的路径,以帮助
CMake 找到该库。
#### Windows
将库文件放在 `C:/Program Files/LibreSSL/lib` 中,将 include 文件放在 `C:/Program Files/LibreSSL/include` 中,应该能让 CMake 自动找到它们,
但建议你使用 CMake-GUI 来设置路径。
这更方便,因为你可以将文件放在你选择的任何文件夹中。
```-DLIBRESSL_SKIP_INSTALL=ON``` 指定 | | `LIBRESSL_APPS` | `ON` | 允许跳过应用程序构建。运行测试需要用到 App | | `LIBRESSL_TESTS` | `ON` | 允许跳过测试。测试仅在静态构建中可用 | | `BUILD_SHARED_LIBS` | `OFF` | 用于构建共享库的 CMake 选项。 | | `ENABLE_ASM` | `ON` | 构建汇编优化规则。 | | `ENABLE_EXTRATESTS` | `OFF` | 启用额外的测试,这些测试在某些平台上可能不可靠 | | `ENABLE_NC` | `OFF` | 启用支持 TLS 的 nc(1) 的安装 | | `OPENSSLDIR` | 空 | 设置默认的 openssl 目录。可以通过命令行使用
```-DOPENSSLDIR=
标签:Bash脚本, OpenSSL替代, TLS, 加密库, 客户端加密, 密码学, 手动系统调用, 系统底层, 跨平台编译, 防御工具