【问题标题】:PyInstaller FATAL FIPS SELFTEST FAILUREPyInstaller 致命 FIPS 自我测试失败
【发布时间】:2022-01-20 15:12:05
【问题描述】:

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

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

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

禁用 FIPS 后,我能够成功运行 PyInstaller 打包的应用程序。

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

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 我正在使用包含 print("hello world") 的 1 行 .py 文件对此进行测试,我使用 pyinstaller -D -F -c testfile.py 并且仍然收到 fips 错误
  • 试试这个thegeekdiary.com/how-to-disable-fips-mode-on-centos-rhel-7 看看 /proc/sys/crypto/fips_enabled 文件中什么时候有 0,然后这个问题就消失了
  • @AKS 是的,当 FIPS 模式被禁用时,我没有遇到这个问题。但我需要启用 FIPS 模式。
  • 我做了一些探索,看看你是否能找到你的案例的提示。 stackoverflow.com/a/71086329/1499296 有所有的发现和解释。至少我的问题解决了。

标签: python linux openssl pyinstaller fips


【解决方案1】:

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

例如:假设一个包管理器 ex:yum / zypper 安装了没有 openssl 的 python(这是 python 应用程序的预安装/先决条件,需要 Openssl 功能)。如果在没有先安装 Openssl 的情况下安装了 python,那么任何需要 openssl 处理的 Python 应用程序都将无法工作,即使您稍后在机器上安装了 openssl; Python 仍然会吐出一堆粗糙的 openssl 错误 :--) 咧嘴一笑。

同样,如果某些东西是在禁用 FIPS 的情况下安装/打包/构建的(在某些机器上),它可以是您正在使用的应用程序或任何库...然后,如果您尝试运行应用程序或应用程序(使用该库/包)在 FIPS = 1(启用)的机器上,您将看到此错误。

就我而言,cmake 无法运行简单的cmake --version,而我所做的只是使用了一个 cmake .tar 包,该包可能已在一台机器上编译,其中源和目标机器的 FIPS 设置相同,即在我的情况下, cmake tar bundle 来自启用 FIPS 的机器,当我在启用 FIPS 的另一台新机器上使用它时,它可以工作!

关于 OpenSSL 错误的 MISC 信息:

模块中自检失败的影响取决于失败的自检类型。

FIPS_mode_set() 函数使用 HMAC SHA-256 摘要验证运行时可执行文件的完整性, 这是在构建时计算的。如果这个计算出的 HMAC SHA-256 摘要与存储的已知摘要匹配,则 加电自检(由特定于算法的成对一致性和已知答案测试组成)是 执行。

非致命自检错误会将模块转换为错误状态。必须重新启动应用程序才能恢复 从这些错误中。非致命的自检错误是:

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 模块手册页。

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

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

重要提示:

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

你可以通过运行来测试:

  1. uptime 命令查看您的服务器/机器已经运行了多长时间。
  2. sudo lsof | grep libssl.so 或查找使用已删除 OpenSSL 库运行的进程,运行:

sudo lsof | grep DEL.*libssl

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

欲了解更多信息,请参阅此链接:https://raymii.org/s/snippets/Find_all_services_using_libssl_to_restart_after_an_OpenSSL_update.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2021-05-24
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多