2012-04-17 66 views
0

我在JBoss-5.1.0上部署了一個Java EE應用程序。爲了獲得額外的安全性,我使用Apache +啓用了SSL來向JBoss提供服務。 Tomcat使用(端口8001上的AJP 1.3)與服務器通信。所以我的配置如下所示:未能連接Flex-

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

此配置似乎適用於除flex部分以外的所有靜態和動態頁面。 我試圖訪問flex部分上的任何東西時,我的問題就開始了。該AMF通道失敗,我可以看到服務器日誌以下堆​​棧跟蹤:

2012-04-13 16:19:50940 ERROR [org.apache.catalina.core.ContainerBase [jboss.web]。 [/ catissuecore]。[MessageBrokerServlet]](ajp-127.0.0.1-8009-4)Servlet.service()for servlet MessageBrokerServlet拋出異常 flex.messaging.security.SecurityException:Secure endpoint'/ messagebroker/amfsecure'必須通過安全協議聯繫。 在flex.messaging.endpoints.AbstractEndpoint.validateRequestProtocol(AbstractEndpoint.java:862) 在flex.messaging.endpoints.AbstractEndpoint.service(AbstractEndpoint.java:630) 在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) at 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) at 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 ) 在org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) 在org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 在org.jboss .web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEst在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 處, 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) 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> 

我的服務,配置。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服務器進行路由。另外我有一個負載均衡器,它會向Apache發送HTTP請求,而不是HTTPS請求,這是問題的根源。我更改了負載平衡器的設置,並且它正常工作。

例外:必須通過安全協議聯繫安全端點'/ messagebroker/amfsecure'。

  1. 此異常本身說明您嘗試通過不安全的協議連接到靈活客戶端到安全端點。
  2. 安全端點接收來自客戶端的消息/請求並解碼它們,然後將它們發送到MessageBroker以路由到服務。所以在這裏請求沒有加密,安全端點會拋出一個異常,因爲在解碼請求時假定是加密的。

解決辦法有兩個:

  • 找出爲什麼不安全的請求被髮送到一個安全的端點。並嘗試解決這個問題。爲此,您可能需要監視發送和接收的所有請求。
  • 打開services-config.xml文件並將flex安全通道的端點類名更改爲'flex.messaging.endpoints.AMFEndpoint'。通過改變這一點,您告訴Flex客戶端通過不安全的端點處理所有請求。如果你不打擾你的配置,只想讓應用程序運行,那麼這樣做。
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