0

非常感谢您阅读本文,任何帮助将不胜感激!服务帐户抛出 - SSLHandshakeException

我正在尝试使用服务帐户在驱动器中列出并创建一个文本文件。已经生成了一个服务帐户,下载了p12文件还为该帐户启用了Drive api。但我得到SSLHandshakeException。

Googleapi版本: 库,源/谷歌的API服务驱动-V2-rev168-1.20.0-sources.jar

Java版本: “1.7.0_79” 的Java(TM)SE运行环境(建立1.7.0_79-B15) 的HotSpot的Java(TM)64位服务器VM(24.79建设-B02,混合模式)

刚才还加载下载的P12文件cacerts文件在\ jdk1.7.0_79 \ JRE \ lib \ security中。

发生错误:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的认证路径请求的目标 异常在线程“main”中javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的证书路径,请求目标 at sun.security .ssl.Alerts.getSSLException(Unknown Source) ........... 引起:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的证书p ath请求目标 at sun.security.validator.PKIXValidator.doBuild(未知源) ................ 引起:sun.security.provider.certpath.SunCertPathBuilderException:无法找到sun.security.provider.certpath.SunCertPathBuilder.engineBuild有效的认证路径要求的目标 (来源不明)

这里是我的源代码:

private static void getSomethingFromDrive() throws Exception { 

    String emailAddress ="[email protected]"; 
    JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); 
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
    GoogleCredential.Builder credBuilder = new GoogleCredential.Builder(); 
    credBuilder.setTransport(httpTransport); 
    credBuilder.setJsonFactory(JSON_FACTORY); 
    credBuilder.setServiceAccountId(emailAddress); 
    credBuilder.setServiceAccountPrivateKeyFromP12File(new File("XXXXX.p12")); 
    credBuilder.setServiceAccountScopes(Arrays.asList(DriveScopes.DRIVE)); 
    GoogleCredential credential = credBuilder.build(); 

     Drive service = new Drive.Builder(httpTransport, JSON_FACTORY, credential).build(); 
     DriveOperation.printAbout(service); 
     //Insert a file 
     com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File(); 
     body.setTitle("My document"); 
     body.setDescription("A test document"); 
     body.setMimeType("text/plain"); 

     java.io.File fileContent = new java.io.File("C:/Personal/document.txt"); 
     FileContent mediaContent = new FileContent("text/plain", fileContent); 

     com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute(); 
     System.out.println("File ID: " + file.getId()); 

} 

回答

0

听起来像一个密钥的问题。您是否将证书导入.jks文件?

嗯。我做了一些快速研究,听起来好像应该起作用。你能查看你在cacerts中添加的证书吗?

还是有可能它是指jre cacerts而不是jdk cacerts?

+0

我有3 cacerts文件在我的所有C驱动器。我已经将p12文件添加到所有cacerts文件,但仍然没有运气。我看到cacerts文件中的私钥安全。 –

+0

尼尔,我已经将p12文件添加到所有cacerts(包括jdk和jre,并且还添加到32 jre。)当我列出的密钥库我可以看到privatekeys如下里阿斯名:专用密钥 创建日期:2016年3月4日 条目类型:PrivateKeyEntry 证书链长:1 证书[1]: 拥有者:CN = 111996787216743957705 发行人:CN = 111996787216743957705 编号:7b5bc826c2aaa1ff 有效期从:周五3月4日19点13分五十秒PST 2016到:星期一3月2日19点13分五十秒PST 2026 证书指纹: \t MD5:E7:BF:... \t SHA1:60:... \t SHA256:1A:8D:5D ...:...... \t签名算法名称:SH A1withRSA \t版本:3 –

+0

我的其他建议是:1)创建一个密钥库(用于验证自己),看看是否有效,并2)检查以确保您导入证书作为正确类型的证书。关于第2点,我不记得证书类型之间的差异,因为我很少这样做,但是我遇到了导入证书的工作中的问题,但我仍然无法进行身份验证,因为我将证书添加为错误的类型。 – neal

0

已解决!!!!! 我正在使用我的工作笔记本电脑,从来没有预料到我的工作电脑在MIM领域:) 我发现,当我试图通过单击浏览器地址栏上的锁定图标获得accounts.google.com证书。 我将代码移到了我的个人设备,它的工作原理应该如此。该死的大队!!!!! ...