PyInstaller FATAL FIPS 自测试失败

PyInstaller FATAL FIPS SELFTEST FAILURE

我已经使用 PyInstaller 打包了一个 python 应用程序。当我 运行 应用程序时,我收到此错误:

crypto/fips/fips.c:154: OpenSSL 内部错误: FATAL FIPS SELFTEST FAILURE 中止(核心转储)

如果我通过“python3 scriptname.py”运行 脚本,它 运行 没问题。我不在我的 python 脚本中使用 OpenSSL。我相信 PyInstaller 使用的东西不符合 FIPS。

在禁用 FIPS 的情况下,我能够成功 运行 PyInstaller 打包应用程序。

如何调试这个错误?有没有办法修补 PyInstaller 使其符合 FIPS 标准?

这通常会发生,如果您安装 python 使用 FIPS enabled/disabled 如果 Python 正在消耗 module/library/something,其中 Python/ 或那个特定的 library/python pyInstaller 可能正在使用一个工件(它是以前在某些机器上构建的,禁用了 FIPS);然后,在另一台机器(实际上启用了 FIPS)上使用此类可执行文件(在禁用 FIPS 的情况下构建),即 FIPS 设置与机器不匹配的地方,您在 python 或那个特定库中构建应用程序的地方,然后,你会得到这样的错误。

Ex:假设一个包管理器 ex: yum / zypper 安装了 python 而没有 openssl(这是 pre-install/pre-requisite for python 应用程序,需要 Openssl 功能)。如果在没有先安装 Openssl 的情况下安装 python,那么任何需要 openssl 处理的 Python 应用程序,Python 将无法运行,即使您稍后在机器上安装 openssl 也是如此; Python 仍然会吐出一堆粗糙的 openssl 错误:--) 大笑。

类似地,如果某些东西 installed/packaged/built 使用 FIPS 禁用(在某些机器上),它可以是一个应用程序或您正在使用的任何库......然后稍后,如果您尝试 运行 一个应用程序或一个应用程序(使用 library/package)在一台机器上,其中 FIPS = 1(启用)然后你会看到这个错误。

在我的例子中,cmake 因 运行ning simple cmake --version 而失败,我所做的只是使用了一个 cmake .tar 包,它可能已经在一台机器上编译,其中source 和 target 机器的 FIPS 设置相同,即在我的例子中,cmake tar bundle 来自启用 FIPS 的机器,当我在另一台启用 FIPS 的新机器上使用它时,它起作用了!

关于 OpenSSL 错误的 MISC 信息:

模块中 self-test 失败的影响因失败的 self-test 类型而异。

FIPS_mode_set() 函数使用 HMAC SHA-256 摘要验证 运行time 可执行文件的完整性, 这是在构建时计算的。如果此计算出的 HMAC SHA-256 摘要与存储的已知摘要匹配,则 power-up self-test(由 algorithm-specific 成对一致性和已知答案测试组成)是 执行。

Non-fatal self-test 错误将模块转换为错误状态。应用程序必须restarted才能恢复 从这些错误。 non-fatal self-test 错误是:

FIPS_R_FINGERPRINT_DOES_NOT_MATCH - 完整性验证检查失败

FIPS_R_FIPS_SELFTEST_FAILED - 已知答案测试失败

FIPS_R_SELFTEST_FAILED - 已知答案测试失败

FIPS_R_TEST_FAILURE – 已知答案测试失败 (RSA);成对一致性测试失败 (DSA)

FIPS_R_PAIRWISE_TEST_FAILED – DSA 或 RSA 密钥生成期间的成对一致性测试失败

FIPS_R_FIPS_MODE_ALREADY_SET - 应用程序在已经初始化时初始化 FIPS 模式

这些错误是通过共享库的常规ERR接口报告的,可以通过 ERR_get_error() 等函数。有关功能说明,请参阅 OpenSSL 模块手册页。

仅当模块处于错误状态(self-test 失败)并且应用程序调用 在正常情况下不能 return 错误的模块的加密函数(void return 函数)。这 错误消息:'FATAL FIPS SELFTEST FAILURE' 打印到 stderr,应用程序终止 中止()调用。

从致命错误中恢复的唯一方法是重新tar应用程序。如果故障仍然存在,您必须重新安装模块。如果您下载了该软件,请验证包哈希以确认下载正确。

重要提示:

如果您安装了较新版本的 OpenSSL x.y.z (rpm/etc) 而没有 reboot/restart 您的机器,一些使用 openssl 的库将容易受到攻击/出错也有类似的错误。

您可以通过 运行ning 测试:

  1. uptime 命令查看你的 server/machine UP n 运行ning.
  2. 多长时间
  3. sudo lsof | grep libssl.so 或查找进程 运行 已删除 OpenSSL 库,运行:

sudo lsof | grep DEL.*libssl

因此,请尝试重新启动您的机器并查看错误是否消失并检查上述命令的输出。

有关详细信息,请参阅此 link:https://raymii.org/s/snippets/Find_all_services_using_libssl_to_restart_after_an_OpenSSL_update.html