libressl/portable

GitHub: libressl/portable

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

Stars: 1480 | Forks: 292

![LibreSSL 图片](https://www.libressl.org/images/libressl.jpg) ## [LibreSSL](https://www.libressl.org) 官方便携版 [![Linux 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/c3/c33de65420803d0add8592aa4b931e3a1e08a5b9b26adf22b253259e954c2119.svg)](https://github.com/libressl/portable/actions/workflows/linux.yml) [![macOS 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/16/1607a6acfceccbf780c835156c87d7334f482cc4aee4e2fa0e1e473570e85c62.svg)](https://github.com/libressl/portable/actions/workflows/macos.yml) [![Windows 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/f7/f7b6fb73a0511a2dde4983f9647ebbba247858768e90ea936c2175f27ff15925.svg)](https://github.com/libressl/portable/actions/workflows/windows.yml) [![Android 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/7c/7c366c39821fccb2a6e82c2d09f26b1b2023fa5d0f94917cca0721818fa5122a.svg)](https://github.com/libressl/portable/actions/workflows/android.yml) [![Solaris 构建状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/0d/0d62615c50e38c9c405877d15d5e4ed2debb86909878b829a21783e1faf06f78.svg)](https://github.com/libressl/portable/actions/workflows/solaris.yml) [![Fuzzing 状态](https://oss-fuzz-build-logs.storage.googleapis.com/badges/libressl.svg)](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 来设置路径。 这更方便,因为你可以将文件放在你选择的任何文件夹中。
标签:Bash脚本, OpenSSL替代, TLS, 加密库, 客户端加密, 密码学, 手动系统调用, 系统底层, 跨平台编译, 防御工具