首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyInstaller致命FIPS自失效

PyInstaller致命FIPS自失效
EN

Stack Overflow用户
提问于 2022-01-20 15:12:05
回答 1查看 1K关注 0票数 0

我使用PyInstaller来打包python应用程序。当我运行应用程序时,我会收到以下错误:

crypto/ FIPS /fips.c:154: OpenSSL内部错误:致命的FIPS SELFTEST失败中止(内核转储)

如果我通过"python3 scriptname.py“运行脚本,它就运行得很好。我没有在我的python脚本中使用OpenSSL。我相信PyInstaller正在使用一些与FIPS不兼容的东西。

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

如何调试此错误?是否有一种方法可以对PyInstaller进行修补,使其符合FIPS?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-11 21:58:14

这通常发生在这样的情况下,如果您安装了python,如果Python正在使用一个模块/库/某个东西,而Python/或特定的库/ python pyInstaller可能正在使用一个工件(以前是在某个机器上构建的,而FIPS是禁用的);然后在另一台机器上使用这样的可执行文件( FIPS禁用了)(实际上启用了FIPS ),即FIPS设置与机器不匹配,在python或特定库中构建应用程序,那么就会出现这样的错误。

让我们假设一个包管理器Ex: yum / zypper安装了没有openssl的python (这是python应用程序的预安装/先决条件,它需要Openssl功能)。如果第一次安装python时没有安装Openssl,那么需要使用openssl处理的任何Python应用程序都不能工作,即使稍后在机器上安装openssl;Python仍然会发出大量严重的openssl错误:

类似地,如果使用禁用FIPS (在某些机器上)安装/打包/构建某物,则它可以是您正在使用的应用程序或任何库.然后,如果您尝试在机器上运行应用程序或应用程序(使用该库/包),其中FIPS =1(已启用),那么您将看到这个错误。

在我的例子中,cmake在运行简单的cmake --version时失败了,我所做的只是使用了一个cmake .tar包,它可能是在一台机器上编译的,其中源机器和目标机器的FIPS设置是相同的--在我的例子中,cmake包来自一台启用了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模块手册页面。

只有当模块处于错误状态(自我测试失败)并且应用程序调用模块的密码函数时,才会发生致命错误,在正常情况下不能返回错误(无效返回函数)。错误消息:‘致命FIPS SELFTEST FAILURE’被打印到stderr中,并且应用程序通过abort()调用终止。

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

重要注意事项:

如果您安装了一个更新版本的OpenSSL x.y.z (rpm/etc),并且没有重新启动/重新启动您的机器,那么使用openssl的一些库也会因为类似的错误而容易受到攻击/出错。

您可以通过运行以下命令来测试这一点:

要查看服务器/机器运行了多长时间,或者要查找使用已删除的

  1. uptime库运行的进程,请运行:

sudo lsof | grep DEL.*libssl

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

有关更多信息,请参考以下链接:https://raymii.org/s/snippets/Find_all_services_using_libssl_to_restart_after_an_OpenSSL_update.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70788681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档