非常感谢您阅读本文,任何帮助将不胜感激!服务帐户抛出 - 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());
}
我有3 cacerts文件在我的所有C驱动器。我已经将p12文件添加到所有cacerts文件,但仍然没有运气。我看到cacerts文件中的私钥安全。 –
尼尔,我已经将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 –
我的其他建议是:1)创建一个密钥库(用于验证自己),看看是否有效,并2)检查以确保您导入证书作为正确类型的证书。关于第2点,我不记得证书类型之间的差异,因为我很少这样做,但是我遇到了导入证书的工作中的问题,但我仍然无法进行身份验证,因为我将证书添加为错误的类型。 – neal