![](/img/trans.png)
[英]SSLPeerUnverifiedException:“peer not authenticated” while using groovy's RestClient with ignoreSSLIssues()
[英]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.