Java “PKIX路径生成失败”和“找不到请求目标的有效证书路径”

我正在尝试为我的Java项目使用twitter4j库获取推文。在我的第一次运行中,我得到了关于证书sun.security.validator.ValidatorException和的错误sun.security.provider.certpath.SunCertPathBuilderException。然后我通过以下方式添加了Twitter证书:

C:\Program Files\Java\jdk1.7.0_45\jre\lib\security>keytool -importcert -trustcacerts -file PathToCert -alias ca_alias -keystore "C:\Program Files\Java\jdk1.7.0_45\jre\lib\security\cacerts"

但是没有成功。这是获取推文的过程:

public static void main(String[] args) throws TwitterException {

ConfigurationBuilder cb = new ConfigurationBuilder();

cb.setDebugEnabled(true)

.setOAuthConsumerKey("myConsumerKey")

.setOAuthConsumerSecret("myConsumerSecret")

.setOAuthAccessToken("myAccessToken")

.setOAuthAccessTokenSecret("myAccessTokenSecret");

TwitterFactory tf = new TwitterFactory(cb.build());

Twitter twitter = tf.getInstance();

try {

Query query = new Query("iphone");

QueryResult result;

result = twitter.search(query);

System.out.println("Total amount of tweets: " + result.getTweets().size());

List<Status> tweets = result.getTweets();

for (Status tweet : tweets) {

System.out.println("@" + tweet.getUser().getScreenName() + " : " + tweet.getText());

}

} catch (TwitterException te) {

te.printStackTrace();

System.out.println("Failed to search tweets: " + te.getMessage());

}

这是错误:

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Relevant discussions can be found on the Internet at:

http://www.google.co.jp/search?q=d35baff5 or

http://www.google.co.jp/search?q=1446302e

TwitterException{exceptionCode=[d35baff5-1446302e 43208640-747fd158 43208640-747fd158 43208640-747fd158], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.5}

at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177)

at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)

at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:81)

at twitter4j.TwitterImpl.get(TwitterImpl.java:1929)

at twitter4j.TwitterImpl.search(TwitterImpl.java:306)

at jku.cc.servlets.TweetsAnalyzer.main(TweetsAnalyzer.java:38)

Caused by: 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(Unknown Source)

at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)

at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)

at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)

at sun.security.ssl.Handshaker.processLoop(Unknown Source)

at sun.security.ssl.Handshaker.process_record(Unknown Source)

at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)

at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)

at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)

at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

at java.net.HttpURLConnection.getResponseCode(Unknown Source)

at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)

at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:34)

at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:141)

... 5 more

Caused by: 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.validator.PKIXValidator.doBuild(Unknown Source)

at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)

at sun.security.validator.Validator.validate(Unknown Source)

at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)

at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)

at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)

... 20 more

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)

at java.security.cert.CertPathBuilder.build(Unknown Source)

... 26 more

Failed to search tweets: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

回答:

在你的firefox浏览器中转到URL,单击HTTPS证书链(URL地址旁边的锁定图标)。点击"more info" > "security" > "show certificate" > "details" > "export.."。提取名称,然后选择文件类型example.cer。现在,你有了带有密钥库的文件,并且必须将其添加到JVM中

确定cacerts文件的位置,例如。 C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.

接下来,example.cer在命令行中将文件导入到cacerts中:

keytool -import -alias example -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -file example.cer

系统将要求你输入密码,默认密码为 changeit

重新启动你的JVM / PC

以上是 Java “PKIX路径生成失败”和“找不到请求目标的有效证书路径” 的全部内容, 来源链接: utcz.com/qa/434174.html

回到顶部