如何使用启用自定义 Fips 的 Openssl 编译 Python 3.6?

How to compile Python 3.6 with custom Fips enabled Openssl?

这是 的后续问题,我在修补 Python 3.6 时遇到了问题。现在我已经设法修补 python 并在 Python 中引入了 FIPS_mode() 和 FIPS_mode_set(),我需要使用带有 fips 模式的自定义 openssl 来编译它它位于 /usr/local/ssl。另一个OpenSSL(系统)也是默认安装的

详细信息:Ubuntu 16.04 LTS

Python: 3.6

OpenSSL:1.0.2h 与 FIPS 2.0.12

我在终端上运行这个命令:

./configure --enable-shared --prefix=/usr/local/python3.6 && make && make install

Python 编译成功但是当我导入 ssl 模块并打印 openssl 版本时,它显示系统的 Openssl 版本是 1.0.2g。除此之外, FIPS_mode() 和 FIPS_mode_set() 方法不会被导出,因为它们不存在于底层 libcrypto.so 和 libssl.so.

经过一番挖掘,我发现了这个 article,它告诉我要替换 /lib/x86_64-linux-gnu/[=44 中的 libcrypto.so 和 libssl.so 共享对象=].如果我用启用 fips 的 libcrypto.so 和 libssl.so 共享对象替换它们,那么 python 编译成功并显示正确的版本,甚至 FIPS 函数也被正确导入,但这会导致其他应用程序系统行为不当。

有没有一种方法可以编译 Python,使其从 /usr/local/ssl 等其他位置查找 libcrypto.so 和 libssl.so 共享对象?

谢谢!

更新:

我设法找到了解决方案并记录了它 here 以防其他人也遇到这个问题。

在配置时指定库路径,您期望的路径似乎不是标准路径。

./configure --enable-shared --prefix=/usr/local/python3.6 -L=/usr/local/ssl/lib/ -I/usr/local/ssl/include && make && make install

这样配置就会从您的预期路径中选取。