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

查看:0
本文介绍了Docker容器CMAKE提供加密/fips/fips.c:153:openssl内部错误:致命的FIPS SELFTEST失败-Dracut-FIPS加密.fips_Enable=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";在此主机上和容器内也可以工作的原因!

问题:

如何才能使cmake --version在容器内工作?当我无法卸载dracut-fips包并通过在第一个主机操作系统上设置加密.fips_Enable=0来禁用FIPS时。

推荐答案

找到解决方案

为什么会出现此问题: Docker构建(用于创建映像)在一台机器上运行(另一台机器,其中cmake在docker容器内工作)……即未安装FIPS的位置。 在构建步骤中,Docker文件正在运行 zypper install cmake(或yum install cmake)。

由于在构建停靠机映像的计算机上禁用了FIPS,cmake安装在停靠机映像中,而不了解正在启用FIPS/正在安装Dracut-FIPS。

然后,当您复制此映像并在实际启用了FIPS的计算机上使用它时,cmake将失败,并显示错误消息:crypto/fips/fips.c:153: OpenSSL internal error: FATAL FIPS SELFTEST FAILURE

实际上有两个解决方案。

--

解决方案1:适当地标记您的停靠图像。

摘要:

Ps:如果您确实使用上述方法安装了cmake,则它将仅在运行容器的目标计算机上工作,前提是该计算机的FIPS在构建时被禁用或启用。即,如果启用了FIPS,则安装cmake并在与构建映像的主机不同的FIPS设置的计算机上运行它,然后您将阅读此帖子以获取帮助。

如果您想要使用上面的包管理器安装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/yumDockerfile内部安装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=/...,因此在停靠容器运行时操作中使用了正确的cmake3.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的某些库也将易受攻击/出现错误,并出现类似的错误。

您可以通过运行以下命令进行测试:

  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

这篇关于Docker容器CMAKE提供加密/fips/fips.c:153:openssl内部错误:致命的FIPS SELFTEST失败-Dracut-FIPS加密.fips_Enable=1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆