0

JBoss-5.1.0にJavaEEアプリケーションをデプロイしました。セキュリティを強化するために、Apache+を有効にしたSSLを使用してJBossを前面に出しました。Tomcatは(ポート8001のAJP 1.3)を使用してサーバーと通信します。したがって、私の構成は次のようになります。

tomcat:443 (ssl) ---|--- Jboss:8080 (IpAddress:8080) (http)

この構成は、フレックス部分を除くすべての静的ページと動的ページでうまく機能するようです。私の問題は、フレックス部分で何かにアクセスしようとすると始まります。AMFチャネルに障害が発生し、サーバーログに次のスタックトレースが表示されます。

2012-04-13 16:19:50,940エラー[org.apache.catalina.core.ContainerBase。[jboss.web]。[localhost]。[/catissuecore]。[MessageBrokerServlet]](ajp-127.0.0.1-8009- 4)サーブレットMessageBrokerServletのServlet.service()が例外flex.messaging.security.SecurityExceptionをスローしました:セキュアエンドポイント'/ messagebroker/amfsecure'はセキュアプロトコルを介して接続する必要があります。 flex.messaging.endpoints.AbstractEndpoint.validateRequestProtocol(AbstractEndpoint.java:862)at flex.messaging.endpoints.AbstractEndpoint.service(AbstractEndpoint.java:630)at flex.messaging.endpoints.AMFEndpoint.service(AMFEndpoint.java:99 )at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:424)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)at org.apache.catalina.core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)at org.apache.catalina.core.StandardContextValve .invoke(StandardContextValve.java:191)at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92 )org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)atorg.apache.catalina。 core.StandardHostValve.invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)at org.apache.catalina .core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:436 )org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(AjpProtocol.java:384)at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:447)atjava.lang。 Thread.run(Thread.java:662)invoke(CachedConnectionValve.java:158)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)at org.apache .coyote.ajp.AjpProcessor.process(AjpProcessor.java:436)at org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(AjpProtocol.java:384)at org.apache.tomcat.util.net.JIoEndpoint $ Worker .run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java:662)invoke(CachedConnectionValve.java:158)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)at org.apache .coyote.ajp.AjpProcessor.process(AjpProcessor.java:436)at org.apache.coyote.ajp.AjpProtocol $ AjpConnectionHandler.process(AjpProtocol.java:384)at org.apache.tomcat.util.net.JIoEndpoint $ Worker .run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java:662)ajp.AjpProtocol $ AjpConnectionHandler.process(AjpProtocol.java:384)at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java: 662)ajp.AjpProtocol $ AjpConnectionHandler.process(AjpProtocol.java:384)at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java: 662)

remote-config.xmlで次のチャネルを定義しました。

 <default-channels>
    <channel ref="my-amf"/>
     <channel ref="my-secure-amf"/>
 </default-channels>

そして私のservices-config.xmlには次の構成があります

 <channels>
    <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
        <endpoint uri="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
        <properties>
            <polling-enabled>false</polling-enabled>
        </properties>
    </channel-definition>

    <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
        <endpoint uri="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
        <properties>
            <!--HTTPS requests on some browsers do not work when pragma "no-cache" are set-->
            <add-no-cache-headers>false</add-no-cache-headers>
        </properties>
    </channel-definition>

誰かがこの問題に直面していますか?

どんなポインタも大いに役立ちます。

4

2 に答える 2

1

解決策は別の答えにありますが、それは明らかではありません。ロードバランサーまたはApacheのいずれかでSSLが終了する場合は、secure-amf次のようにチャネル定義クラスを切り替える必要があります。

<channel-definition id="my-secure-amf" class="mx.messaging.channels.AMFChannel">

<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">

出典: http: //blogs.adobe.com/kmossman/2010/02/lcds_with_ssl_termination_with.html

于 2013-01-31T23:42:39.610 に答える
0

私の場合、HTTPSトラフィックのみを許可し、これらすべてのHTTPSトラフィックはSSL対応のApacheサーバーを介してルーティングすることが許可されていました。また、問題の根本的な原因であるHTTPSリクエストの代わりにHTTPリクエストを送信するApacheと通信するロードバランサーがあります。ロードバランサーの設定を変更しましたが、正常に動作します。

例外:セキュアエンドポイント'/ messagebroker / amfsecure'は、セキュアプロトコルを介して接続する必要があります。

  1. この例外自体は、安全でないプロトコルを介して安全なエンドポイントへのフレックスクライアントに接続しようとしていることを示しています。
  2. 安全なエンドポイントは、クライアントからメッセージ/要求を受信して​​デコードし、サービスにルーティングするためにメッセージブローカーに送信します。したがって、ここではリクエストは暗号化されていません。リクエストのデコード中は暗号化されたものと見なされるため、セキュアエンドポイントは例外をスローします。

2つの解決策があります:

  • 安全でないリクエストが安全なエンドポイントに送信される理由を確認してください。そして、この問題を修正してみてください。このため、送受信されたすべてのリクエストを監視する必要がある場合があります。
  • services-config.xmlファイルを開き、フレックスセキュアチャネルのエンドポイントクラス名を「flex.messaging.endpoints.AMFEndpoint」に変更します。これを変更することで、セキュリティで保護されていないエンドポイントを介してすべてのリクエストを処理するようにフレックスクライアントに指示します。構成を気にせず、アプリケーションを実行したいだけの場合は、これを実行します。
于 2012-05-03T22:50:21.357 に答える