gsoap - 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 中运行良好。对于如何解决这个问题,有任何的建议吗?
解决方案
似乎 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.log
is中产生错误httpd
,您可以执行以下操作:
sudo ausearch -c 'httpd' --raw | audit2allow -M my-policy
sudo semodule -X 300 -i my-policy.pp
audit2allow
通常,如果存在可用于该服务的内置布尔值,则用于允许访问该服务不是一个好习惯。audit2allow
如果您的特定服务没有适当的布尔值,请作为最后的手段使用。
推荐阅读
- sapui5 - 如何在 UI5 应用程序中管理会话
- acumatica - 如何在 POCreate 页面上以编程方式单击“处理”操作?
- dialogflow-es - 如何在 Google Assistant 中将 Dialogflow 代理移交给人类?
- flutter - 在flutter web中上传图片
- angular - 在 Angular 中处理多个查询参数
- python - 在不停止进程的情况下动态启用和禁用哨兵?
- python - ValueError:检查输入时出错:预期 conv2d_79_input 有 4 个维度,但得到了形状为 (99、4457、4) 的数组
- seaborn - Seaborn catplot,浮动到整数横坐标
- typescript - Conditional typing in TypeScript
- javascript - 在输入字段上设置最大和最小限制?