请你帮忙。我有一个Codenameone应用程序,它向云Tomcat 8服务器发出GET请求,并期望返回一些响应。重要的是,这是一个HTTPS通话。
当我在Postman中运行请求时,它工作正常:
https://www.mydomain.co.uk:8443/MyProject/v1/generate_token
同一个URL在我的浏览器中工作并显示为“安全”,我可以看到我的证书详细信息。我已经为我的SSL/TLS配置购买了一个证书,在启动时的日志中似乎运行良好。
在模拟器中,我在从URL调用读取响应时返回了以下错误——我猜必须对其进行加密:
Exception: javax.net.ssl.SSLHandshakeException - sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1959)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1514)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:961)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
at com.codename1.impl.javase.JavaSEPort.getResponseCode(JavaSEPort.java:7591)
at com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:702)
at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:282)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
为什么应用程序应该与邮递员拨打电话有任何不同(网络监视器窗口确认相同的URL呼叫)?
我打电话后没有更新任何日志,所以没有什么可查看的。自从从http改为https后,我还没有对我的应用程序做任何更改(该应用程序正在运行)。
以下是拨打电话的CN1代码:
public String fetchTokenIntoStorage(String userName, String password) {
ConnectionRequest r = new ConnectionRequest();
r.setUrl(Constants.URL_HOST_PORT + "/MyProject" + Constants.LIVE_OR_TEST
+ "/v1/generate_token");
r.addRequestHeader("Content-Type", "application/json");
r.addRequestHeader("userName", userName);
r.addRequestHeader("password", password);
r.setHttpMethod("GET");
r.setFailSilently(false);
r.setPost(false);
// show spinning dialog while connecting
InfiniteProgress prog = new InfiniteProgress();
Dialog dlg = prog.showInifiniteBlocking();
r.setDisposeOnCompletion(dlg);
NetworkManager.getInstance().setTimeout(10000);
// NetworkManager.getInstance().addErrorListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent evt) {
// MessageBox.showDialogMessage("Unable to connect to server. Please
// retry later.");
// }
// });
// NetworkManager.getInstance().updateThreadCount(2);
NetworkManager.getInstance().addToQueueAndWait(r);
if (r.getResponseData() != null) {
JSONParser parser = new JSONParser();
Map<String, Object> json = null;
try {
json = parser.parseJSON(new InputStreamReader(new ByteArrayInputStream(r.getResponseData())));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (json.get("error") != null) {
return String.valueOf(json.get("error"));
}
JwtRecord record = new JwtRecord();
record.userId = Integer.parseInt(String.valueOf(json.get("userId")));
record.jsonWebToken = (String) json.get("jwt");
record.theme = "LIGHT";
Storage.getInstance().writeObject("MyToken", record);
return "";
}
if (!r.getResponseErrorMessage().equalsIgnoreCase("")) {
return r.getResponseErrorMessage();
} else {
return "Unable to connect to server. Please check connection.";
}
}
一步一步地检查代码,它似乎刚刚出错
NetworkManager.getInstance().addToQueueAndWait(r);
r.getResponseData()和r.getResponseErrorMessage()为空。
非常感谢
它现在正在工作。
>
(在cloud tomcat上)我确保根证书和中介证书在我的密钥库中(根据我之前包含的链接)。我在密钥库中包含了我的. ca-bundle以进行很好的测量。
(在云tomcat上)我注意到我使用的是旧版本的Apache配置(关于依赖旧论坛帖子的经验教训)。需要SSLCA证书文件指向我的。在我的apache中使用ca bundle文件,而不是SSCertificateChainFile。conf文件。
它在我的模拟器上仍然是错误的,但在我的iphone上是有效的,正如Shai所说,iphone指向了我所期望的不同的JDK,所以我把我的笔记本升级到了更高的JDK 1.8.171。这本身并没有什么不同,但可能是必需的。
通过四处挖掘,我意识到我笔记本电脑上的模拟器也需要上述功能。所以我最终以管理员的身份在命令提示符下运行了下面的语句,现在我的模拟器开始工作了。
cd%java\u home%\jre\lib\security
路径=%java\u home\bin
keytool-import-alias comodo-keystore cacerts-C:\path\comodoot文件。cer
keytools-import-aliascomodo_intermediate-keystore cacerts-file C:\path\Comoline Inter.cer
keytool-import-alias purchased_cert-keystore cacerts-C:\path\my_purchased_cert.crt文件
如果基础JDK无法识别签名权限,就会发生这种情况。假设您从有效来源购买了证书,它可能使用了相对较新的根,这意味着您需要使用最新版本的JDK 8。
例如,仅在JDK 8更新101中添加了let加密。
我正在处理STS,在创建新的spring boot项目时,它显示以下错误: 因为它访问https://start.spring.io作为服务URL。 我在一家公司网络中工作,他们有自己的证书和安全规则。我查看了网络,但找不到任何明确的STS解决方案。如何在STS中为给定URL添加证书路径。非常感谢您的帮助。
在Keycloak服务器控制台中 我已成功测试与 Windows Active Directory 服务器的连接 - 正常 但是在测试验证时继续接收错误消息 服务器控制台输出:验证器异常:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilder异常:找不到到请求目标的有效证书路径 但仍然存在相同的错误。
我正在使用restTemplate发出post请求,并收到以下错误:无法找到到请求目标的有效证书路径 我的方法如下:
我在Flutter中创建了一个新应用程序。我尝试在Android Mobile上运行该应用程序。它显示在错误下方。 但当我试图在Chrome或Edge(网络设备)上运行同样的程序时。它在跑。
问题内容: 我有一个可以从https服务器下载文件的类。当我运行它时,它返回很多错误。我的证书似乎有问题。是否可以忽略客户端服务器认证?如果是这样,怎么办? 错误: 问题答案: 当你的服务器具有自签名证书时,会出现此问题。要解决此问题,你可以将此证书添加到JVM的受信任证书列表中。 在本文中,作者描述了如何从浏览器中获取证书并将其添加到JVM的cacerts文件中。你可以使用-参数编辑文件或运行应
下面是idea.log http://pastebin.com/kyhfrbp9