opencryptoki/opencryptoki

GitHub: opencryptoki/opencryptoki

PKCS#11 标准的开源实现,为 Linux 和 AIX 提供统一的加密令牌访问接口,支持 IBM 硬件加密设备和软件令牌。

Stars: 150 | Forks: 61

[![构建状态](https://app.travis-ci.com/opencryptoki/opencryptoki.svg?branch=master)](https://app.travis-ci.com/opencryptoki/opencryptoki) [![Coverity Scan 构建状态](https://img.shields.io/coverity/scan/16802.svg?branch=master)](https://scan.coverity.com/projects/opencryptoki-opencryptoki) # openCryptoki 软件包版本 3.26 有关特定版本的信息,请参阅 [ChangeLog](ChangeLog)。 ## 概述 openCryptoki 版本 3.26 实现了 PKCS#11 规范版本 3.0 以及部分版本 3.1。 此软件包包含几个加密令牌: CCA, ICA, TPM, SWToken, ICSF 和 EP11。 有关 openCryptoki 的更深入概述,请参阅手册 [openCryptoki - An Open Source Implementation of PKCS #11](https://www.ibm.com/docs/en/linux-on-systems?topic=support-opencryptoki-open-source-pkcs-11) **注意:** TPM 令牌已被弃用,因为它仅支持 TPM 版本 1.2。 不适用于 TPM 版本 2.0。我们计划在未来的 openCryptoki 版本中移除 TPM 令牌。 AIX 仅支持 CCA 和软件令牌,并且两者都在默认构建配置中启用。其他令牌不受支持且无法强制启用,即使通过 `configure` 工具也不行。 ## 需求: ### 通用 构建 opencryptoki 需要以下工具。 - flex - bison - make - autoconf - automake - pkg-config - libtool - m4 - openldap-devel - openssl-devel - libcap-devel (仅限 Linux) - systemd-devel (仅限 Linux) 这些库通常由您平台的包管理工具提供。在 AIX 上,必须从 AIX Toolbox 仓库安装它们。 ### 令牌 - IBM ICA - 需要 libica 库版本 3.3.0 或更高版本,以便在 IBM zSeries 上访问 ICA 硬件加密。 - IBM CCA - 需要 CCA 主机库版本 7.1 或更高版本,以及 IBM Z 上的 IBM Crypto CEX3C 卡(或更高版本)。在 AIX、Linux on x64 和 Linux on Power 上,仅支持 IBM CEX7S (4769) 加密卡。在所有平台上,此令牌都需要 `lber` 库,该库通常是 `openldap` 包的一部分。 - TPM (**已弃用**) - 需要 TPM, TPM 工具, 和 TCG 软件栈。仅支持 TPM 版本 1.2。 - SWToken - 软件令牌使用 OpenSSL 版本 1.1.1 或更高版本。此令牌需要 `lber` 库,该库通常是 openldap 的一部分。 - ICSF - Integrated Cryptographic Service Facility (ICSF) 令牌需要 openldap 和 openldap 客户端软件版本 2.4.23 或更高版本。构建此令牌还需要 Lex 和 Yacc。 - EP11 - EP11 令牌是使用配置了 Enterprise PKCS#11 (EP11) 固件的 IBM Crypto Express 适配器(从 Crypto Express 4S 适配器开始)的令牌。 ## 构建过程 **注意:** 在 AIX 上构建 opencryptoki 仅支持 AIX 7.2 及更高版本。 尝试在较旧的 AIX 版本上构建将因缺少 API 而失败。 编译此软件包最简单的方法是进入源代码主目录并执行以下操作: 1. 通过键入以下命令运行 bootstrap.sh 脚本: ``` $ ./bootstrap.sh ``` **注意:** 此软件包使用 autoconf 归档中的 `AX_PROG_CC_FOR_BUILD` autoconf 宏来支持交叉编译器构建。 如果您的系统不提供此宏,您可能需要安装 `autoconf-archive` 包或将该宏下载并放入 `m4` 目录。请参阅 [此处](https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html) 获取 `ax_prog_cc_for_build.m4` 最新版本的链接。 2. 通过键入以下命令配置源代码: ``` $ ./configure ``` 如果您计划将软件包安装到您的主目录或 `/usr/local` 以外的位置,请在 `configure` 中添加标志 `--prefix=PATH`。例如,如果您的主目录是 `/home/luser`,您可以通过调用来配置软件包以将其安装在那里: ``` $ ./configure --prefix=/home/luser ``` 如果您的 stdll 头文件和库不在任何标准路径下,您需要将文件路径传递给配置脚本。 **注意:** 在 AIX 上编译时,必须将 `CFLAGS` 和 `LDFLAGS` 设置为可以正确找到 openldap 库和头文件的正确路径。如果使用 [AIX Toolbox](https://www.ibm.com/support/pages/aix-toolbox-open-source-software-downloads-alpha#O) 中的 `openldap-devel` 包,则必须在调用 `./configure` 之前或同时将 `CFLAGS` 和 `LDFLAGS` 分别设置为 `-I/opt/freeware/include` 和 `-L/opt/freeware/lib`。例如, ``` $ CPPFLAGS="-L/path/lib" LDFLAGS="-I/path/include" ./configure ``` 有关各种选项的信息,请参阅 `./configure --help`。默认行为是构建所有满足前提条件的令牌。ICA 和 EP11 令牌只能在 s390x 上构建,因为这是唯一满足前提条件的平台。在 AIX 上,只能构建 CCA 和软件令牌。如果提供了适当的库且令牌在您编译的平台上受支持,其他令牌可以使用相应的 `--enable-` 配置选项启用。 在运行时,`configure` 会打印一些消息,告知它正在检查哪些功能。 **注意**:在 AIX 上,如果您希望运行 `make distcheck`,环境变量 `DISTCHECK_CONFIGURE_FLAGS` 必须包含 `CFLAGS` 和 `CXXFLAGS` 的适当值。 3. 通过键入以下命令编译软件包: ``` $ make ``` **注意:** 不要在 `make` 调用中指定 `prefix=/foo/bar`, `libdir=/foo/bar`。请在 `configure` 中指定它们。openCryptoki 软件包不支持在 `make` 中指定它们,可能会产生意外结果! 4. openCryptoki 默认允许 ``pkcs11`` 组中的任何人使用。 在安装之前,通过以 root 身份键入以下命令添加 pkcs11 组: ``` # groupadd pkcs11 ``` 此外,将必要的用户添加到 pkcs11 组(root 不需要在 pkcs11 组中): ``` # usermod -a -G pkcs11 ``` 5. 键入 `make install`(以 root 身份)以安装程序和任何数据文件及文档。在安装期间,以下文件将放入以下目录: ``` ${prefix}/sbin/pkcsconf ${prefix}/sbin/pkcsslotd ${prefix}/sbin/pkcsicsf ${prefix}/libdir/libopencryptoki.so ${prefix}/libdir/libopencryptoki.so.0 ${prefix}/libdir/opencryptoki/libopencryptoki.so ${prefix}/libdir/opencryptoki/libopencryptoki.so.0 ${prefix}/libdir/opencryptoki/libopencryptoki.so.0.0.0 ${prefix}/var/lib/opencryptoki ${prefix}/etc/opencryptoki/opencryptoki.conf ``` 可选构建的令牌对象将放入以下位置: ``` ${prefix}/libdir/opencryptoki/stdll/libpkcs11_cca.so ${prefix}/libdir/opencryptoki/stdll/libpkcs11_cca.so.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_cca.so.0.0.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_ep11.so ${prefix}/libdir/opencryptoki/stdll/libpkcs11_ep11.so.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_ep11.so.0.0.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_ica.so ${prefix}/libdir/opencryptoki/stdll/libpkcs11_ica.so.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_ica.so.0.0.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_icsf.so ${prefix}/libdir/opencryptoki/stdll/libpkcs11_icsf.so.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_icsf.so.0.0.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_sw.so ${prefix}/libdir/opencryptoki/stdll/libpkcs11_sw.so.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_sw.so.0.0.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_tpm.so ${prefix}/libdir/opencryptoki/stdll/libpkcs11_tpm.so.0 ${prefix}/libdir/opencryptoki/stdll/libpkcs11_tpm.so.0.0.0 ``` 其中 `prefix` 是 `/usr/local` 或您在 `--prefix` 标志中指定的 PATH。`libdir` 是库目录的名称,对于 32 位库通常是 `lib`,对于 64 位库通常是 `lib64`。 为了保持向后兼容性,生成了一些额外的符号链接(请注意,这些已弃用,应用程序应迁移以使用符合 LSB 的库名称和可执行文件位置): ``` ${prefix}/lib/opencryptoki/PKCS11_API.so - Symlink to ${prefix}/lib/opencryptoki/libopencryptoki.so ${prefix}/lib/opencryptoki/stdll/PKCS11_CCA.so - Symlink to ${prefix}/lib/opencryptoki/stdll/libpkcs11_cca.so ${prefix}/lib/opencryptoki/stdll/PKCS11_EP11.so - Symlink to ${prefix}/lib/opencryptoki/stdll/libpkcs11_ep11.so ${prefix}/lib/opencryptoki/stdll/PKCS11_ICA.so - Symlink to ${prefix}/lib/opencryptoki/stdll/libpkcs11_ica.so ${prefix}/lib/opencryptoki/stdll/PKCS11_ICSF.so - Symlink to ${prefix}/lib/opencryptoki/stdll/libpkcs11_icsf.so ${prefix}/lib/opencryptoki/stdll/PKCS11_SW.so - Symlink to ${prefix}/lib/opencryptoki/stdll/libpkcs11_sw.so ${prefix}/lib/pkcs11/PKCS11_API.so - Symlink to ${prefix}/lib/opencryptoki/libopencryptoki.so ${prefix}/lib/pkcs11 - Directory created if non-existent ${prefix}/lib/pkcs11/methods - Symlink to ${prefix}/sbin ${prefix}/lib/pkcs11/stdll - Symlink to ${prefix}/lib/opencryptoki/stdll ${prefix}/etc/pkcs11 - Symlink to ${prefix}/var/lib/opencryptoki ``` 如果这些目录目前不存在,它们将根据需要创建。请注意,如果 `prefix` 是 `/usr`,则 `${prefix}/var` 和 `${prefix}/etc` 解析为 `/var` 和 `/etc`。在 `make install` 阶段,如果旧 `${prefix}/etc/pkcs11` 目录中存在内容,它将被迁移到新的 '${prefix}/var/lib/opencryptoki` 位置。 如果您安装在主目录中,请确保 `/home/luser/bin` 在您的路径中。如果您使用 bash shell,请在 `.bashrc` 文件末尾添加此行: ``` PATH="/home/luser/bin:${PATH}" export PATH ``` 如果您使用 csh 或 tcsh,则改用此行: ``` setenv PATH /home/luser/bin:${PATH} ``` 通过将主目录前置于 PATH 的其余部分,您可以用自己的自定义安装覆盖系统范围的已安装软件。 有关更多安装信息,请查看 [INSTALL](INSTALL)。 ## 配置 参见: https://www.ibm.com/support/knowledgecenter/linuxonibm/com.ibm.linux.z.lxce/lxce_stackoverview.html 在版本 3 之前,openCryptoki 使用 `pk_config_data` 作为其配置文件。该文件在运行 `pkcs11_startup` 时创建。在版本 3 中,`pkcs11_startup` 和 `pk_config_data` 已被移除,并替换为一个名为 `opencryptoki.conf` 的可自定义配置文件。它包含 openCryptoki 当前支持的每个令牌的条目。但是,只有那些在本地系统上具备硬件和软件要求的令牌才会在运行 `pkcsconf -t` 命令时显示为存在且可用。 在使用之前,必须先初始化每个令牌。您可以使用 `-c` 命令行选项选择令牌;有关更多说明,请参阅上面链接的文档。 通过运行 `pkcsconf` 初始化特定令牌: ``` $ pkcsconf -I -c ``` 在此版本的 openCryptoki 中,默认的 SO PIN 是 `87654321`。这应该在使用前更改为不同的 PIN 值。 您可以通过运行 pkcsconf 更改 SO PIN: ``` $ pkcsconf -P -c ``` 您可以通过键入以下命令初始化和更改用户 PIN: ``` $ pkcsconf -u -c ``` 您可以稍后通过键入以下命令再次更改用户 PIN: ``` $ pkcsconf -p -c ``` ## 贡献 参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:AIX, CCA, EP11, HSM, HTTP工具, IBM加密硬件, ICA, ICSF, OpenCryptoki, Open Source, PKCS#11, SamuraiWTF, TPM 1.2, zSeries, 加密API, 加密库, 子域名枚举, 安全测试工具, 客户端加密, 密码学, 底层库, 手动系统调用, 硬件安全模块, 系统安全, 软件令牌