wolfSSL/wolfEngine
GitHub: wolfSSL/wolfEngine
wolfEngine 是基于 wolfCrypt 的 OpenSSL 加密引擎插件,使应用程序无需修改代码即可实现 FIPS 合规。
Stars: 29 | Forks: 35
# wolfEngine
wolfEngine 是一个由 wolfSSL 的 wolfCrypt 加密库作为后端支持的 [OpenSSL engine](https://www.openssl.org/docs/man1.0.2/man3/engine.html)。wolfCrypt 已通过 [FIPS 认证](https://csrc.nist.gov/Projects/cryptographic-module-validation-program/Certificate/3389),因此可以使用 wolfEngine 来实现 OpenSSL 的 FIPS 合规性,而完全无需修改 OpenSSL 的代码本身。
## 功能
* SHA-1
* SHA-224
* SHA-256
* SHA-384
* SHA-512
* SHA3-224
* SHA3-256
* SHA3-384
* SHA3-512
* DES3-CBC
* AES
* 128、192 和 256 位密钥
* ECB
* CBC
* CTR
* GCM
* CCM
* DRBG
* RSA
* DH
* ECC
* ECDSA
* ECDH
* EC 密钥生成
* Curve P-192
* Curve P-224
* Curve P-256
* Curve P-384
* Curve P-521
* HMAC
* CMAC
* HKDF
* PBKDF2
* TLS PRF
### OpenSSL 版本支持
wolfEngine 可用于任何支持 engine 框架的 OpenSSL 版本。engine 在 OpenSSL 3.0.0 中已被弃用。它们被一个称为 [providers](https://www.openssl.org/docs/manmaster/man7/provider.html) 的类似概念所取代。
wolfSSL 还提供了一个由 wolfCrypt 作为后端支持的 provider。如果您有兴趣评估 wolfSSL 的 provider,请联系 facts@wolfssl.com。
#### 注意事项
* 只有 OpenSSL 1.1.1+ 版本才支持 SHA-3。
* 只有 OpenSSL 1.1.1+ 版本才支持 EC_KEY_METHOD。
## 在 \*nix 上构建
### TL;DR>
最快上手的方法是使用 `scripts/util-*.sh`。有一个 `scripts/test-sanity.sh` 脚本,它会拉取所有必需的依赖项,根据需要进行编译,最后运行一些测试以确保一切正常工作。如需更详细的分步说明,请继续阅读。
### OpenSSL
假设您已将 OpenSSL 源代码下载到名为 openssl 的目录中:
```
cd openssl
./config shared
make
sudo make install
```
### wolfSSL
#### 从 FIPS 包构建
使用此 configure 命令:
```
./configure --enable-engine
```
这会自动添加对 `--enable-engine=fips-v2` 的支持。如果使用的是 FIPSv5 140-3 包,请将其替换为 `--enable-engine=fips-v5`。如果使用的是 FIPS Ready 包,请将其替换为 `--enable-engine=fips-ready`。如果您的 wolfSSL 版本不支持 `--enable-engine`,请改用以下命令:
```
./configure --enable-fips=v2 --enable-opensslcoexist --enable-cmac
--enable-keygen --enable-sha --enable-des3 --enable-aesctr --enable-aesccm
--enable-x963kdf CPPFLAGS="-DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT
-DWC_RSA_NO_PADDING -DWOLFSSL_PUBLIC_MP -DECC_MIN_KEY_SZ=192 -DSha3=wc_Sha3
-DNO_OLD_SHA256_NAMES -DNO_OLD_MD5_NAME"
```
如果使用的是 FIPS Ready 包,请将 `--enable-fips=v2` 更改为 `--enable-fips=ready`。
#### 从 Git 构建
```
git clone https://github.com/wolfssl/wolfssl.git
cd wolfssl
./autogen.sh
./configure --enable-engine=no-fips
make
sudo make install
```
如果您的 wolfSSL 版本不支持 `--enable-engine`,请改用以下命令:
```
./configure --enable-opensslcoexist --enable-cmac --enable-keygen --enable-sha
--enable-des3 --enable-aesctr --enable-aesccm --enable-x963kdf
CPPFLAGS="-DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT -DWC_RSA_NO_PADDING
-DWOLFSSL_PUBLIC_MP -DECC_MIN_KEY_SZ=192 -DWOLFSSL_PSS_LONG_SALT
-DWOLFSSL_PSS_SALT_LEN_DISCOVER"
```
#### 其他选项
- 如果使用 PKCS#12,请在上述 configure 命令中添加 `--enable-pwdbased`。
- 添加 `--enable-debug` 以开启 debug 日志记录。
### wolfEngine
```
git clone https://github.com/wolfSSL/wolfEngine.git
cd wolfEngine
./autogen.sh
./configure --with-openssl=/path/to/openssl/installation --with-wolfssl=/path/to
/wolfssl/installation
make
make check
```
如果找不到 OpenSSL 或 wolfSSL 库,`make check` 可能会失败。在这种情况下,请尝试 `export LD_LIBRARY_PATH=/path/to/openssl/installation/lib:/path/to/wolfssl/installation/lib:$LD_LIBRARY_PATH`,然后重新运行 `make check`。
#### 自定义
* 要以单线程模式构建 wolfEngine,请在 configure 命令中添加 `--enable-singlethreaded`。
* 要构建支持 PBES 的 wolfEngine(与 PKCS #12 配合使用),请添加 `--enable-pbe`。注意:wolfSSL 必须已配置 `--enable-pwdbased`。
* 要禁用动态加载 wolfEngine 的支持,请添加 `--disable-dynamic-engine`。
* 要构建 wolfEngine 的静态版本,请添加 `--enable-static`。
* 要使用自定义的 user_settings.h 文件来覆盖由 `./configure` 生成的定义,请添加 `--enable-usersettings`,并将包含所需定义的 user_settings.h 文件放置在 include 目录中。请查看项目根目录以获取 user_settings.h 的示例。
* 要构建支持 debug 的 wolfEngine,请添加 `--enable-debug`。然后,要在 runtime 激活 debug 日志记录,您的应用程序应向 wolfEngine(此处记为 "e")发送此控制命令:`ENGINE_ctrl_cmd(e, "enable_debug", 1, NULL, NULL, 0)`。
* 要构建用于 OpenSSH 的 wolfEngine,请添加 `--enable-openssh`。
## 在 \*nix 上测试
### 单元测试
使用 `make check` 运行单元测试。
如果出现类似 `error while loading shared libraries: libssl.so.3` 的错误,则说明找不到该库。请按照前面的说明使用 `LD_LIBRARY_PATH` 环境变量。
### 集成测试
请查看 scripts 目录,了解与其他应用程序(如 OpenSSH、stunnel 等)的集成测试。
### 提交测试
对于运行提交测试的 wolfEngine 开发者,可以使用 `WOLFENGINE_OPENSSL_INSTALL` 环境变量设置自定义的 OpenSSL 安装路径。设置后,wolfEngine 提交测试将在 configure 时使用 `--with-openssl=WOLFENGINE_OPENSSL_INSTALL` 设置的指定 OpenSSL 安装路径进行提交测试。
## Windows
有关使用 Visual Studio 构建 wolfEngine 的说明,请参阅 `windows/README.md`。
## 示例
使用 wolfEngine 的示例程序可以在 `examples/` 子目录中找到。
## 需要帮助?
请通过 support@wolfssl.com 获取技术支持。如果您对商业许可、FIPS 运行环境扩展、咨询服务或其他商业合作感兴趣,请联系 facts@wolfssl.com。
标签:FIPS合规, OpenSSL, wolfSSL, 加密库, 客户端加密, 密码学, 底层组件, 手动系统调用