收到带有签名的 Ajp 无效消息

Posted

技术标签:

【中文标题】收到带有签名的 Ajp 无效消息【英文标题】:Ajp invalid message received with signature 【发布时间】:2012-08-03 21:20:03 【问题描述】:

我正在使用带有 Apache 2.2.22 modproxy 的 Tomcat 7.0.29。 在 httpd.conf 中将 Ajp 配置为协议,在 server.xml 中配置 AjpNioProtocol。 服务器启动后,日志中会显示以下消息:

严重:收到带有签名 20599 的无效消息 com.apache.coyote.ajp.AjpMessage processHeader

没有请求发送到 web 或 tomcat 服务器,它仍然会抛出该错误。 tomcat和apache的访问日志显示没有请求进来。 是什么导致了无效消息错误?

这是配置:

httpd.conf

ProxyPass /wl ajp:// ip : port /wl
ProxyPassReverse /wl ajp:// ip : port /wl

服务器.xml

<Connector port="port" 
           protocol="org.apache.coyote.ajp.AjpNioProtocol" 
           connectionTimeout="20000" 
           acceptorThreadCount="2" 
           maxThreads="1600" 
           redirectPort="8443" />

【问题讨论】:

这里是 server.xml --> 你能提供你当前的配置来避免这种情况吗?要添加什么,要从哪个文件中删除什么 【参考方案1】:

发现其中一个内部进程正在调用该端口并发送 http 请求导致“无效消息..”错误。所以我最终为这些内部流程添加了一个额外的 http 连接器

【讨论】:

【参考方案2】:

这也可能发生在两端的缓冲区大小不同时:日志提到无效的 AJP 消息并且浏览器收到 400 错误代码。

我已经修复了 Apache2 配置中 AJP connector 和 ProxyIOBufferSize 上的 packetSize 的情况。

在Tomcat中server.xml

<Connector protocol="AJP/1.3" port="8009"
   connectionTimeout="20000"
   packetSize="65536"
   proxyName="yourproxy.domain.ltd" proxyPort="80"
   />

在 Apache2 mod_proxy_ajp configuration 中,添加语句 ProxyIOBufferSize 65536

【讨论】:

【参考方案3】:

对我来说,问题很简单。我正在发送 HTTP 请求,但连接器配置了 AJP 协议。我在server.xml 中的连接器配置如下:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

但是当我把它改成这样的时候:

<Connector port="8009" protocol="HTTP/1.1" redirectPort="8443"/>

错误消失了。

希望这能帮助解决此错误的人。

【讨论】:

默认情况下,在 8080 等其他端口上配置了一个 HTTP 连接器。因此,与其使用 AJP 端口,不如将调用应用程序重新配置为不使用 HTTP 的 8009,而是使用另一个端口,例如8080 代替。这更好地遵循了标准约定。【参考方案4】:

我今天收到了类似的消息:

Nov 18, 2016 4:25:00 PM org.apache.coyote.ajp.AjpMessage processHeader
SEVERE: Invalid message received with signature 65524

我的问题的根本原因是 selinux 没有让 apache 连接到 tomcat。对于这个错误是如何导致的,我有点困惑——我希望不会有任何联系,期间。最好的猜测,我可能尝试使用 telnet 手动连接到该端口。这样做肯定会发出类似的信息。

不管怎样,也许这个 selinux 提醒会对最终来到这里的其他人有所帮助。

【讨论】:

【参考方案5】:

没有请求发送到 web 或 tomcat 服务器,它仍然会抛出该错误。 tomcat和apache的访问日志显示没有请求进来。是什么导致了invalid message错误?

只是给其他人一些提示,因为我不小心在我的一个配置中忘记了相同的内容:server.xml 中提到的Connector 正在全局监听,因为只指定了port,没有任何address。后者默认定义为全局监听:

默认情况下,此端口将用于与服务器关联的所有 IP 地址。

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

因此,如果没有任何额外的防火墙等,不良客户端可能只是使用各种协议测试开放端口,这些协议可能是也可能不是HTTP,因此会导致带有不同签名的错误消息。如果没有很好的理由,就不需要让 AJP 全局可用,尤其是在线程启动器使用的代理设置的情况下。

<Connector  address="localhost" port="port" 
            protocol="org.apache.coyote.ajp.AjpNioProtocol" 
            connectionTimeout="20000" 
            acceptorThreadCount="2" 
            maxThreads="1600" 
            redirectPort="8443" />

【讨论】:

以上是关于收到带有签名的 Ajp 无效消息的主要内容,如果未能解决你的问题,请参考以下文章

GoogleSignatureVerifier 签名无效消息(google play services 9.0.0)

在集群上运行 OpenId 提供程序时消息签名无效

将应用上传到应用商店。 ITMS-90035:“代码或签名已被修改”

为什么我总是收到带有React Router的错误消息

GDAX Post Call 返回无效签名

ITMS-90034:签名缺失或无效错误