这是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,以防其他人也遇到此问题。
答案 0 :(得分:1)
在配置时指定库路径,似乎您的预期路径不作为标准路径可见。
./configure --enable-shared --prefix=/usr/local/python3.6 -L=/usr/local/ssl/lib/ -I/usr/local/ssl/include && make && make install
这样配置就会从您预期的路径中选择。