Docker容器CMAKE提供加密/fips/fips.c:153:openssl内部错误:致命的FIPS SELFTEST失败-Dracut-FIPS加密.fips_Enable=1 [英] Docker container CMAKE gives crypto/fips/fips.c:153: OpenSSL internal error: FATAL FIPS SELFTEST FAILURE - dracut-fips crypto.fips_enabled = 1
问题描述
获取加密/fips/fips.c:153:openssl内部错误:致命的FIPS SELFTEST失败时间
Dracut-fips程序包已安装和sysctl-a显示crypto.fips_enabled = 1
限制:无法不禁用My Case中的dracut-fips
包或crypto.fips_enable
设置。
问题:
如何让cmake --version
在容器内工作?
此主机是容器内部的问题,而不是主机操作系统的问题。
someLinuxUser@jenkins-project_team_rh ~]$ hostname -f; hostname -i
jenkins-project_team_rh.lewisville.us.company.com
10.20.20.10[someLinuxUser@jenkins-project_team_rh ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
[someLinuxUser@jenkins-project_team_rh ~]$
[someLinuxUser@jenkins-project_team_rh ~]$ cmake --version
cmake version 3.18.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
列出并启动OpenSUSE 15.2容器
[someLinuxUser@jenkins-project_team_rh ~]$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
opensuse-image 15.2 618840498a55 3 hours ago 2.59GB
运行Docker容器
现在我在容器内。在此处运行";cmake--version";失败,并出现错误。
注意:如果您有任何主机操作系统,则相同的扩展底座映像可以很好地工作,其中";sysctl-a|grep fips";将在其输出中显示".fips_Enabled=0";。因此,我们可能需要将此值设置为0。
[someLinuxUser@jenkins-project_team_rh ~]$ sudo docker run -it opensuse-image:15.2 bash
Active Directory Password:
WARNING: IPv4 forwarding is disabled. Networking will not work.
docker_nonroot_user@eaa40032f4d3:~/git>
docker_nonroot_user@eaa40032f4d3:~/git> which cmake; cmake --version
/usr/bin/cmake
crypto/fips/fips.c:153: OpenSSL internal error: FATAL FIPS SELFTEST FAILURE
Aborted (core dumped)
docker_nonroot_user@eaa40032f4d3:~/git>
docker_nonroot_user@3e63938cf7e7:~/git> cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.2"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.2"
PRETTY_NAME="openSUSE Leap 15.2"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.2"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
在主机操作系统(RH 7.9)上--/--在运行
的Docker容器(OpenSUSE 15.2)内[someLinuxUser@jenkins-project_team_rh ~]$ sysctl -a | grep fips_enabled
crypto.fips_enabled = 1
如图所示,此主机上已启用FIPS。我认为如果将此设置(crypto.fips_enabled
设置为= 0
),则cmake可能不会出现此问题,但在我的情况下,我无法禁用此设置。
在主机上,一些相关的包是:
[someLinuxUser@jenkins-project_team_rh ~]$ sudo yum list installed | egrep "fips|openssl|dracut"
dracut-fips.x86_64 033-572.el7 @rhel-x86_64-server-7
fipscheck.x86_64 1.4.1-6.el7 @anaconda/7.6
fipscheck-lib.x86_64 1.4.1-6.el7 @anaconda/7.6
CentrifyDC-openssl.x86_64 5.7.1-347 installed
openssl.x86_64 1:1.0.2k-22.el7_9 @q1_rhel-x86_64-server-7
openssl-devel.x86_64 1:1.0.2k-22.el7_9 @q1_rhel-x86_64-server-7
openssl-libs.x86_64 1:1.0.2k-22.el7_9 @q1_rhel-x86_64-server-7
openssl098e.x86_64 0.9.8e-29.el7_2.3 @anaconda/7.6
xmlsec1-openssl.x86_64 1.2.20-7.el7_4 @anaconda/7.6
dracut.x86_64 033-572.el7 @rhel-x86_64-server-7
dracut-config-rescue.x86_64 033-572.el7 @rhel-x86_64-server-7
dracut-network.x86_64 033-572.el7 @rhel-x86_64-server-7
[someLinuxUser@jenkins-project_team_rh ~]$
现在,证明上面使用的Docker镜像/容器不错。
在不同的计算机、相同的主机操作系统上使用相同的Docker映像。
在我拥有的另一台RH 7.9操作系统主机上,我有相同的停靠镜像,当我启动与停靠容器相同的OpenSUSE 15.2镜像并运行cmake--版本时,一切正常,我没有看到此错误。
运行:
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ hostname -f; hostname -i
rh_7_9_os_machine.company.local
10.100.100.10
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
opensuse-image 15.2 618840498a55 3 hours ago 2.59GB
此主机显示:
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ sysctl -a 2>/dev/null | grep fips_enabled
crypto.fips_enabled = 0
运行Docker镜像-->;容器并在其中cmake --version
工作!
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ sudo docker run -it opensuse-image:15.2 bash
docker_nonroot_user@fb751d198066:~/git>
docker_nonroot_user@fb751d198066:~/git> sysctl -a 2>/dev/null | grep fips
crypto.fips_enabled = 0
docker_nonroot_user@fb751d198066:~/git>
docker_nonroot_user@fb751d198066:~/git> cmake --version
cmake version 3.17.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).
docker_nonroot_user@fb751d198066:~/git> exit
主机上的百胜套餐为:
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ sudo yum list installed |grep fips
fipscheck.x86_64 1.4.1-6.el7 @anaconda/7.4
fipscheck-lib.x86_64 1.4.1-6.el7 @anaconda/7.4
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ sudo yum list installed |grep openssl
openssl.x86_64 1:1.0.2k-22.el7_9 @rhel-7-server-rhui-rpms
openssl-devel.x86_64 1:1.0.2k-22.el7_9 @rhel-7-server-rhui-rpms
openssl-libs.x86_64 1:1.0.2k-22.el7_9 @rhel-7-server-rhui-rpms
openssl11-libs.x86_64 1:1.1.1g-2.el7 @epel
xmlsec1-openssl.x86_64 1.2.20-7.el7_4 @rhui-REGION-rhel-server-releases
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ sudo yum list installed |grep dracut-fips
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$
[gigauser@rh_7_9_os_machine opensuse-x-project_team_-mse]$ sudo yum list installed |grep dracut
dracut.x86_64 033-572.el7 @rhel-7-server-rhui-rpms
dracut-config-generic.x86_64 033-572.el7 @rhel-7-server-rhui-rpms
dracut-config-rescue.x86_64 033-572.el7 @rhel-7-server-rhui-rpms
dracut-network.x86_64 033-572.el7 @rhel-7-server-rhui-rpms
正如您在上面看到的,此计算机上未安装名为的Dracut-fips程序包,假设这就是加密.fips_Enable=0和cmake--Version";在此主机上和容器内也可以工作的原因!
如何才能使 找到解决方案 为什么会出现此问题:
Docker构建(用于创建映像)在一台机器上运行(另一台机器,其中cmake在docker容器内工作)……即未安装FIPS的位置。
在构建步骤中,Docker文件正在运行
由于在构建停靠机映像的计算机上禁用了FIPS,cmake安装在停靠机映像中,而不了解正在启用FIPS/正在安装Dracut-FIPS。 然后,当您复制此映像并在实际启用了FIPS的计算机上使用它时,cmake将失败,并显示错误消息: -- 解决方案1:适当地标记您的停靠图像。 摘要:问题:
cmake --version
在容器内工作?当我无法卸载dracut-fips
包并通过在第一个主机操作系统上设置加密.fips_Enable=0来禁用FIPS时。推荐答案
zypper install cmake
(或yum install cmake
)。crypto/fips/fips.c:153: OpenSSL internal error: FATAL FIPS SELFTEST FAILURE
实际上有两个解决方案。
如果您想要使用上面的包管理器安装cmake,更好的方法是在映像创建期间适当地标记您的坞站映像,即:
docker build -t <image-name>-fips-enabled ...
如果启用了FIPS
和
docker build -t <image-name>-fips-disabled ...
如果该计算机上的FIPS被禁用。
这样,您就可以选择正确的docker映像ImageName-FIPS-EnablevsImageName-FIPS-Disableacc。目标计算机的FIPS设置(您将使用此映像实际执行docker run ...
)。
--
解决方案2:如果您有RedHat容器,请不要使用zypper(OpenSUSE)或yum。 此解决方案非常灵活因为它独立于构建映像的主机上的FIPS设置=0/1。
我没有使用zypper
/yum
在Dockerfile
内部安装cmake
,只是抓取了cmake-3.18.2-Linux-x86_64.tar.gz包文件。
在Dockerfile中,我只是将这个.tar.gz文件解压缩到某个目录中。
我还在Run语句中的Dockerfile中设置了export PATH:/path/where/I/installed/cmake-3.18.2../bin:/..some_other_paths:/...:/....
。
即
RUN export PATH=/path/where/I/installed/cmake-3.18.2../bin:/...... && <more cmds here> && <some other cmds here> && ... etc
,这样它就可以为任何buil-time(cmake操作)找到提取的cmake 3.18.2,并且还设置了与ENV PATH=/.... same value used during RUN for PATH
相同的Path=/...变量,因此在运行时,当容器运行时,$Path都被设置为查找cmake
(3.18.2版本),而不是使用任何现有的/usr/bin/cmake or some other shit
)。
Dockerfile快照:
# curl -k -sSf -H "X-JFrog-Art-Api:dslfhjlieurqwihlj233lk2l4j6p9usdkajdfasddl809842iijhlkhflhafOHIHFLyeaGoodLuck"
# -o /tmp/cmake.tar.gz https://artifactory.company.com/artifactory/some-Local/cmake/cmake-3.18.2-Linux-x86_64.tar.gz &&
和
由于我的umask设置设置为022,因此我不必在untar后执行任何chmod操作:
# echo -e "
-- Installing CMake ...
" &&
# tar -xvzpf /tmp/cmake.tar.gz -C /home/docker_nonroot_user/tools/ &&
在停靠容器内,由于在Dockerfile中也为此目标路径设置了ENV PATH=/...
,因此在停靠容器运行时操作中使用了正确的cmake
3.18.2。
cmake我案例中的安装位置是:
/home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
码头容器内的路径为:
/home/docker_nonroot_user/tools/cov-analysis/bin:/home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
结果:
使用上面解决方案2构建的Docker映像,即在FIPS=0又称为禁用的计算机上构建的Docker映像,然后使用相同的映像在完全不同的目标主机上创建容器其中FIPS=1又启用,我看到:
87d8104d8c41:/home/docker_nonroot_user # sysctl -a|grep fips_en
crypto.fips_enabled = 1
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # which cmake
/usr/bin/cmake
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # cmake --version
crypto/fips/fips.c:153: OpenSSL internal error: FATAL FIPS SELFTEST FAILURE
Aborted (core dumped)
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # ls -l /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin
total 75504
-rwxr-xr-x 1 root root 11908568 Aug 20 2020 ccmake
-rwxr-xr-x 1 root root 12096216 Aug 20 2020 cmake
-rwxr-xr-x 1 root root 27476480 Aug 20 2020 cmake-gui
-rwxr-xr-x 1 root root 12398808 Aug 20 2020 cpack
-rwxr-xr-x 1 root root 13318712 Aug 20 2020 ctest
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # ls -l /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
-rwxr-xr-x 1 root root 12096216 Aug 20 2020 /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake
87d8104d8c41:/home/docker_nonroot_user #
87d8104d8c41:/home/docker_nonroot_user # /home/docker_nonroot_user/tools/cmake-3.18.2-Linux-x86_64/bin/cmake --version
cmake version 3.18.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
87d8104d8c41:/home/docker_nonroot_user # : Merry X-mas Baaaaeeebyyy! - no more FIPS shit error now. Next I'll fix some chown on ~<user> and close my story.
解决方案3:您可以禁用FIPS,但仅当您被允许时,您才不需要解决方案1或解决方案2。
OpenSSL错误的其他信息:
模块中自检失败的影响因自检失败的类型而异。
函数的作用是:使用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,并且应用程序终止,并显示 中止()调用。 从致命错误中恢复的唯一方法是重新启动应用程序。如果故障仍然存在,则必须重新安装该模块。如果您下载了该软件,请验证包哈希以确认正确下载。重要说明:
如果您安装了较新版本的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
这篇关于Docker容器CMAKE提供加密/fips/fips.c:153:openssl内部错误:致命的FIPS SELFTEST失败-Dracut-FIPS加密.fips_Enable=1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!