SOAP 1.2 故障:SOAP-ENV:Receiver [无子代码]

SOAP 1.2 fault: SOAP-ENV:Receiver [no subcode]

我们有一个用 java 编写的 Web 服务(使用 Axis 1.4)。 我们使用 gSOAP (2.8.101) 在 C++ 代码中访问它。 我们正在使用 OpenSSL (1.1.1e)。 在 RHEL 8 上,我们看到 SOAP 1.2 故障。错误如下: SOAP 1.2 故障:SOAP-ENV:Receiver [无子代码] "Permission denied" 详细信息:在 tcp_connect()

中连接失败

相同的代码在 RHEL7 中运行良好。 关于如何解决这个问题有什么建议吗?

似乎 SELinux 正在阻止连接。要暂时允许连接,您可以使用 setenforce 0。这不会在服务器重启后继续存在,因此如果您希望它继续存在,您需要将 SELinux 设置为在 /etc/selinux/config.

中以 permissive 模式工作

要继续在 enforcing 模式下工作,根据应用程序,可能有一个内置的 SELinux 策略允许您将 SELinux 设置为 enforcing 的连接,只需启用适当的布尔值。您可以通过执行以下命令获取所有 SELinux 布尔值的列表:

getsebool -a # List all available SELinux booleans on your system

例如,要允许 HTTPD 脚本和模块连接到网络,请启用以下 SELinux 布尔值:

sudo setsebool -P httpd_can_network_connect on

如果您不想让 HTTPD 连接到任何端口,您可以使用适当的布尔值:

sudo setsebool -P httpd_can_network_connect_db on

这将允许 HTTPD 通过网络连接到数据库。如果没有适合您启用的布尔值,则您必须构建自己的策略。您可以使用 audit2allow -M 命令来做到这一点。例如,如果在 audit.log 中生成错误的命令是 httpd,您可以执行以下操作:

sudo ausearch -c 'httpd' --raw | audit2allow -M my-policy
sudo semodule -X 300 -i my-policy.pp

通常,如果某项服务有可用的内置布尔值,则使用 audit2allow 来允许访问该服务并不是一个好的做法。如果没有适合您的特定服务的布尔值,请使用 audit2allow 作为最后的手段。