簡體   English   中英

使用Google Map API時獲取“對等身份未通過身份驗證”

[英]Getting “peer not authenticated” while using google map api's

創建javafx包后,我使用Google Map api獲得了“未對等身份驗證”。 從代碼或可執行jar文件直接運行時,它工作正常,以下是我遇到的異常,

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
   at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)
   at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
   at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390)
   at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
   at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
   at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
   at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561)
   at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
   at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
   at com.precisionhawk.flightplanner.utils.LocationUtils.performAPICall(LocationUtils.java:109)
   at com.precisionhawk.flightplanner.utils.LocationUtils.getAutocompleteResults(LocationUtils.java:74)
   at com.precisionhawk.flightplanner.controls.AddressTextField$1$1.run(AddressTextField.java:103)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
   at java.util.concurrent.FutureTask.run(FutureTask.java:166)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)

我正在使用http客戶端調用api。 我嘗試繞過X509證書,但仍然沒有運氣

下面是我的代碼

SSLContext ctx = null;
 try {

            SSLUtilities.trustAllHostnames();
            SSLUtilities.trustAllHttpsCertificates();

            HttpClient httpClient = new DefaultHttpClient();

            HttpGet getRequest = new HttpGet(url.toString());
            getRequest.addHeader("accept", "application/json");

            HttpResponse response = httpClient.execute(getRequest);

            if (response.getStatusLine().getStatusCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatusLine().getStatusCode());
            }
            BufferedReader br = new BufferedReader(
                    new InputStreamReader((response.getEntity().getContent())));
            String inputLine;

            while ((inputLine = br.readLine()) != null) {
                result = result + inputLine;
            }
            br.close();
            LOG.info("Autocomplete API call Response: " + result);
            }
            catch (Exception e) {
                LOG.error("Autocomplete  Exception: "+e.getMessage());
            }

如果通過“創建javafx程序包”表示創建一個自包含應用程序 ,則其原因是默認Java部署博客中未包含默認的自包含應用程序包裝中的sun密碼擴展。

從部署博客引用,其中包含有關將sun jce提供程序與JavaFX 2.2的獨立應用程序一起使用的說明。 可能對於JavaFX部署工具的將來版本,將提供一種更方便的方法來執行此操作。

微調應用程序包

如果使用打包工具生成可安裝的軟件包,則可能需要先調整應用程序映像,然后再將其包裝到安裝程序中。 為什么? 例如,您可能需要對應用程序進行簽名,因此它似乎並非不受操作系統的信任(例如,請取悅Mac OS X Gatekeeper)。

同樣,默認情況下,獨立的應用程序不包含Java Runtime的完整副本。 我們僅包括一組強制性組件。 采用這種方法的部分原因是我們希望減小包裝尺寸。 但是,在某些情況下,您的應用程序可能取決於這些可選組件,在這種情況下,您將需要一種將它們添加到私有運行時的方法。 例如,如果缺少jre/lib/ext/sunjce_provider.jar則https連接將不起作用。

當前,這可以通過提供自定義配置腳本來實現,該腳本在填充應用程序映像之后執行。 像上面帶有圖標的示例一樣,您需要啟用詳細輸出以找到腳本文件的名稱,然后將其拖放到打包工具可以找到它的位置。 請注意,腳本語言也是特定於平台的。 目前,我們僅支持Windows上的Mac / Linux和Windows腳本外殼。

您如何找到應用程序映像的位置? 當前,自定義腳本在存儲配置文件的目錄中運行,但是可以使用特定於平台的相對路徑訪問應用程序映像。 您可以從詳細輸出中導出此路徑,也可以通過將環境變量JAVAFX_ANT_DEBUG設置為true來保留中間構建工件。

這是示例腳本(由John Petersen提供),可用於在Windows平台jre/lib/ext/sunjce_provider.jar到MyApp的應用程序包中。 使用Java腳本的腳本,但是您也可以將VBScript用於Windows腳本。

<?xml version="1.0" ?>  
<package>  
   <job id="postImage">  
    <script language="JScript">  
     <![CDATA[  
        var oFSO = new ActiveXObject("Scripting.FileSystemObject");  
        var oFolder = oFSO.getFolder(".");  
        var from = oFolder.path + "\\MyApp\\app\\sunjce_provider.jar";  
        var to = oFolder.path + "\\MyApp\\runtime\\jre\\lib\\ext";  
        if (!oFSO.FolderExists(to)) {  
          oFSO.CreateFolder(to);  
        }  
        to += "\\";  
        oFSO.CopyFile(from, to);  
     ]]>  
    </script>  
   </job>  
</package>

我正在使用Maven。 所以我應該如何從pom.xml調用此腳本,該腳本將在jre / lib / ext文件夾中創建jar?

我不是專家。 上面的解決方案是針對apache ant的。 如果您希望繼續使用Maven,則需要解決此問題的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM