编辑: -尝试格式化问题并在我的博客中以更明显的方式接受答案
这是原始问题.
我收到此错误:
详细消息sun.security.validator.ValidatorException:PKIX路径构建失败:
sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径导致javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
我使用Tomcat 6作为网络服务器.我有两个HTTPS Web应用程序安装在不同端口上但位于同一台机器上的不同Tomcats上.说App1(port 8443)和
App2(port 443).App1连接到App2.当App1所连接到App2我得到上述错误.我知道这是一个非常常见的错误,所以在不同的论坛和网站上遇到了很多解决方案.我有server.xml两个Tomcats 的以下条目:
keystoreFile="c:/.keystore"
keystorePass="changeit"
Run Code Online (Sandbox Code Playgroud)
每个站点都说同样的原因,即app2提供的证书不在app1 jvm的可信存储中.当我试图在IE浏览器中访问相同的URL时,这似乎也是正确的,它可以工作(加热,这个网站的安全证书存在问题.在这里我说继续这个网站).但是当Java客户端(在我的情况下)遇到相同的URL时,我得到上述错误.所以把它放在信任库中我试过这三个选项:
选项1
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Run Code Online (Sandbox Code Playgroud)
Option2 在环境变量中设置如下
CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Run Code Online (Sandbox Code Playgroud)
选项3 在环境变量中设置如下
JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Run Code Online (Sandbox Code Playgroud)
但没有任何效果.
最后工作的 是执行如何使用Apache HttpClient处理无效SSL证书中建议的Java方法?由Pascal Thivent执行,即执行程序InstallCert.
但这种方法适用于devbox设置,但我无法在生产环境中使用它.
我很奇怪,为什么上面提到的三种方法时,我已经中提到的相同值没有工作server.xml的app2服务器和相同的价值观信任设置
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); …
我有一个类将从https服务器下载文件.当我运行它时,它会返回很多错误.我的证书似乎有问题.是否可以忽略客户端 - 服务器身份验证?如果是这样,怎么样?
package com.da;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.CharBuffer;
import java.util.concurrent.Future;
import org.apache.http.HttpResponse;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.IOControl;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.nio.client.methods.AsyncCharConsumer;
import org.apache.http.nio.client.methods.HttpAsyncGet;
import org.apache.http.nio.client.methods.HttpAsyncPost;
public class RSDDownloadFile {
static FileOutputStream fos;
public void DownloadFile(String URI, String Request) throws Exception
{
java.net.URI uri = URIUtils.createURI("https", "176.66.3.69:6443", -1, "download.aspx",
"Lang=EN&AuthToken=package", null);
System.out.println("URI Query: " + uri.toString());
HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
httpclient.start();
try {
Future<Boolean> future = httpclient.execute(
new HttpAsyncGet(uri),
new ResponseCallback(), null);
Boolean result …Run Code Online (Sandbox Code Playgroud) 每当我进入终端时:
keytool -list -alias androiddebugkey -keystore~/.android/debug.keystore -storepass android -keypass android
它要我输入密码.我以前从未设置过密码.我已经阅读了其他地方放入"android",但我仍然收到以下错误:
keytool错误:java.io.IOException:Keystore被篡改,或密码不正确
我也是Mac环境的新手.每当我输入密码时,光标都不会移动.我不确定这是否是隐藏密码的默认Mac行为,或者密码是否未注册,这就是我收到错误的原因.任何帮助表示赞赏.
太奇怪了,我之前用android studio 创建了一个keystore。我的工作室是金丝雀频道(1.4),我总是保持工作室更新。最后一天我收到了那个错误,我什至将我的工作室降级到稳定频道(1.3)。 但是当我在命令行中使用 gradle 构建时,一切都很好。我确定我的密码是正确的。
完整的错误是:
Error:Execution failed for task ':app:packageDevRelease'.
Run Code Online (Sandbox Code Playgroud)
无法从存储“D:\work\app_proj\Android\jxj\trunk\JXJ\app\szyx.keystore”读取密钥**:密钥库被篡改,或密码不正确