2012-04-17 19 views
0

JBoss-5.1.0にJava EEアプリケーションをデプロイしました。特別なセキュリティを確保するために、私はJBossにApache + enabled sslを付け加えました。 Tomcatは(AJP1.3をポート8001として)サーバーと通信します。したがって、私の設定は次のようになります。接続に失敗するFlex-

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

この設定は、フレックス部分以外のすべての静的ページと動的ページでうまくいくようです。 フレックス部分の何かにアクセスしようとすると、私の問題が始まります。 AMFチャンネルが失敗し、私は、サーバーログに次のスタックトレースを見ることができます:

2012-04-13 16:19:50940 ERROR [org.apache.catalina.core.ContainerBase [jboss.web]。サーブレットMessageBrokerServletの例外Servlet.service()が例外を投げた flex.messaging.security.SecurityException:セキュアなエンドポイント '/ messagebroker/servlet.service() amfsecure 'は安全なプロトコルで連絡を取らなければなりません。 flex.messaging.endpoints.AbstractEndpoint.validateRequestProtocol(AbstractEndpoint.java:862)flex.messaging.endpoints.AMFEndpoint.serviceでflex.messaging.endpoints.AbstractEndpoint.service(AbstractEndpoint.java:630) で(AMFEndpointで .java:99) at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:424) (javax.servlet.http.HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) ) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve org.jboss.web.tomcat.security.SecurityAssociationValve.invokeでorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) で.invoke(StandardWrapperValve.java:235) (SecurityAssociationValve.java:190 org.jbossでorg.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) でorg.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) で) .web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEst ablishmentValve.java:70)ORGでorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102でorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) で) 。 (org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) )。 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.T hread.run(Thread.java:662は)

私は、リモート-config.xmlに次のチャンネルを定義しています

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

そして、私のサービス-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> 

は、誰もがこの問題に直面していた構成は次の通りですか?

任意のポインタが有効です。

答えて

0

私の場合、私はHTTPSトラフィックのみを許可し、これらのHTTPSトラフィックはすべて、SSL対応のApacheサーバー経由でルーティングすることができました。また、問題の根本原因であったHTTPS要求の代わりにApacheにHTTP要求を送信するロードバランサがあります。私はロードバランサの設定を変更し、正しく動作します。

例外:セキュアなエンドポイント '/ messagebroker/amfsecure'には、安全なプロトコルで接続する必要があります。

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

    • は見つける:

は、二つの解決策があります。この問題を解決しようとします。このために、送信されたすべての要求を監視する必要があります。

  • services-config.xmlファイルを開き、フレックス・セキュア・チャネルのエンドポイント・クラス名を「flex.messaging.endpoints.AMFEndpoint」に変更します。これを変更することで、安全でないエンドポイントを介してすべての要求を処理するようにフレックスクライアントに指示します。設定を気にせずにアプリケーションを実行したい場合は、これを行います。
  • 1

    解決策はもう一方の答えですが、明らかではありません。 SSLは、ロードバランサにまたはApacheのいずれかで終了した場合は、次のように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

    関連する問題