首页 > 解决方案 > SOAP 1.2 错误:SOAP-ENV:Receiver [无子代码]

问题描述

我们有一个用 java 编写的 Web 服务(使用 Axis 1.4)。我们使用 gSOAP (2.8.101) 在 c++ 代码中访问它。我们正在使用 OpenSSL (1.1.1e)。在 RHEL 8 上,我们看到了 SOAP 1.2 错误。错误如下: SOAP 1.2 fault: SOAP-ENV:Receiver [no subcode] "Permission denied" 详情:connect failed in tcp_connect()

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

标签: gsoapselinux

解决方案


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

要继续在enforcing模式下工作,取决于应用程序,可能有一个内置的 SELinux 策略,enforcing通过启用适当的布尔值来允许您将 SELinux 设置为所需的连接。您可以通过执行以下命令获取所有 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.logis中产生错误httpd,您可以执行以下操作:

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

audit2allow通常,如果存在可用于该服务的内置布尔值,则用于允许访问该服务不是一个好习惯。audit2allow如果您的特定服务没有适当的布尔值,请作为最后的手段使用。


推荐阅读