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

时间:2018-03-28 11:19:43

标签: python python-3.x openssl fips

这是this SO question的后续问题,我在修补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版本时,它向我显示了System的Openssl版本1.0.2g。除此之外,不会导出FIPS_mode()和FIPS_mode_set()方法,因为它们不存在于基础libcrypto.so和libssl.so中。

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

有没有办法以这样的方式编译Python,它从其他位置查找libcrypto.so和libssl.so共享对象,例如/ usr / local / ssl?

谢谢!

更新

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

1 个答案:

答案 0 :(得分:1)

在配置时指定库路径,似乎您的预期路径不作为标准路径可见。

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

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