我正在尝试使用twitter4j库为我的java项目发送推文.在我第一次运行时,我收到了关于证书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"
Run Code Online (Sandbox Code Playgroud)
但没有成功.这是获得twitters的过程:
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() + " …Run Code Online (Sandbox Code Playgroud) 我认为我和其他人一样遇到了同样的问题,我一直在经历众多类似的问题和潜在的解决方案,但没有运气.
我正在使用的信任库是cacerts,位于Java 1.6.0 JRE的lib/security中(构建1.6.0_20-b02 ......这可能是问题的根源吗?).我也尝试过jssecacerts.
使用InstallCert(发布其他类似的问题),我可以看到我的证书实际上已经安装并且有效(我已经删除它,重新导入它等,以确保我看到正确的数据):
java InstallCert <my host name>
Loading KeyStore jssecacerts...
Opening connection to <my host name>:443...
Starting SSL handshake...
No errors, certificate is already trusted
Run Code Online (Sandbox Code Playgroud)
检查keytool和Portecle,重新导入证书(我尝试使用-showcert从openssl生成,从浏览器导出并将其scping过来等)给了我"这已经存在于此处的其他别名下"类型信息.因此,证书进入工具的方式似乎没有任何问题.
在代码中强制显式的trustStore路径没有任何区别,并且在所有情况下,当我打开调试(通过javax.net.debug的setProperty到"all")时我最终看到的是:
main, SEND TLSv1 ALERT: fatal, description = certificate_unknown
main, WRITE: TLSv1 Alert, length = 2 [Raw write]: length = 7 0000: 15
03 01 00 02 02 2E ....... main, called
closeSocket() main, handling 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 …Run Code Online (Sandbox Code Playgroud)