2014-09-23 33 views
3

嗨所有Java/Applet的大師,crossdomain.xml的檢索JSE 1.8,沙箱Java小程序加載通過HTTPS,但使用HTTP

我已經用最新的JDK版本(1.8.0_b26)在一個有趣的問題絆倒。

從Java代碼中運行Sandbox Java Applet和最新的JDK時,我們嘗試使用不同的協議連接回服務器 - 我們使用WSS(安全的Websockets連接,我們使用第三方Websockets Client Java圖書館)。結果,JVM嘗試從服務器檢索crossdomain.xml文件。問題是,該文件是使用HTTP(而不是HTTPS)協議檢索的。

例如,在我們的例子中,服務器IP是192.168.1.1,該applet通過HTTPS默認端口(443)加載。在Java控制檯中使用跟蹤級別5,我們看到從http://192.168.1.1:443檢索到crossdomain.xml。當然,它不起作用,因爲服務器只偵聽端口443(而不是HTTP)上的HTTPS連接。另一方面,當我們使用HTTP協議並向服務器打開新的WS(不安全的Websockets連接)時,問題不會出現,因爲crossdomain.xml是從http://192.168.1.1:80檢索到的,並且它是完全正確的。

隨着問題進一步研究,我們已經取得了一些更多的看法:

  1. 它可以提供crossdomain.xml文件中使用jnlp.altCrossDomainXMLFiles Java虛擬機參數的其他位置。我們從來沒有成功使這個參數適用於我們(嘗試在java_arguments列表中和獨立的applet參數)。可能的原因可能是該參數只能用於Webstart應用程序(儘管它不是專門在規範中編寫的)。

  2. 同時建立的WebSockets連接,連接堆棧跟蹤如下:

在sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:790)在 的太陽。 net.www.http.HttpClient.parseHTTP(HttpClient.java:647)at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:787)at sun.net.www.http.HttpClient.parseHTTP( HttpClient.java:647)at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1534) 在 sun.net.www.protocol.http.HttpURLConnection.access $ 200(HttpURLConnection.java:90) 在 sun.net.www.protocol.http.HttpURLConnection $ 9.run(HttpURLConnection.java:1431) 在 sun.net.www.protocol.http.HttpURLConnection $ 9.run(HttpURLConnection.java:1429) at java.security.AccessController.doPrivileged(Native Method)at java.security.AccessController.doPrivileged(AccessController.java:713 ) 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1428) 在com.sun.deploy.net.CrossDomainXML.check(未知來源)在 com.sun.deploy.net 。CrossDomainXML.check(未知來源) sun.plugin2.apple t.SecurityManagerHelper.checkConnectHelper(Unknown Source)at sun.plugin2.applet.AWTAppletSecurityManager.checkConnect(Unknown Source)at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl。java:624)

所以我們看了CrossDomainXML.java類的最新公開源代碼(從2010年回來)。從代碼中可以明顯看出,從服務器檢索crossdomain.xml文件時始終使用http連接,無論原始瀏覽器連接是什麼。

所以問題是:

  1. 它可能是一個JDK錯誤或HTTP爲crossdomain.xml嚴格的使用是由設計?

  2. jnlp.altCrossDomainXMLFiles Sandbox applet中支持JVM參數嗎?

  3. 有沒有辦法訪問com.sun.deploy.net.CrossDomainXML.java源代碼的最新版本,以獲取正在發生的事情的全貌?

非常感謝您提前。

最好的問候, 馬克

+0

'1.8.0_b26'遠不是「最新的JDK構建」。該測試版與最新版本之間有多個版本。最新的JDK版本是['jdk1.8.0_20'](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)或['jdk1.8.0_40_b06'] (https://jdk8.java.net/download.html)。 – Holger 2014-09-23 10:11:45

+0

@霍爾,謝謝你的快速回復。剛試過'jdk1.8.0_40_b06' - 結果相同。還研究了'jnlp.axlCrossDomainXMLFiles'變量。它似乎可以通過Sandbox Applet訪問(沒有安全例外),但我找不到使其工作的方法。 – 2014-09-23 12:01:56

回答

0

我們在init-process(applet構造函數)早期的applet中像這樣使用它,它的工作原理如下:

try 
{ 
    System.setProperty("jnlp.altCrossDomainXMLFiles", // 
     "http://www.some-domain.de/crossdomain.xml" // 
     + ",https://www.secure-domain.de:8443/crossdomain.xml" // 
    ); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 
相關問題