如果您安装了启用/禁用 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 的库也将易受攻击/出错并出现类似错误。
你可以通过运行来测试:
-
uptime 命令查看您的服务器/机器已经运行了多长时间。
-
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