Броски сервисного аккаунта - SSLHandshakeException

Большое спасибо за то, что прочитали этот пост, мы будем благодарны за любую помощь !!

Я пытаюсь использовать учетную запись службы для создания списка и создания текстового файла на Диске. Создал учетную запись службы, загрузил файл p12, также включил Drive api для учетной записи. Но я получаю исключение SSLHandshakeException.

Версия Googleapi: libs-sources / google-api-services-drive-v2-rev168-1.20.0-sources.jar

версия java: "1.7.0_79" Среда выполнения Java (TM) SE (сборка 1.7.0_79-b15) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 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: невозможно найти действительный путь сертификации к запрошенной цели в sun.security.ssl.Alerts.getSSLException (Неизвестный источник) ........... Вызвано: sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели 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());

}

person Venki Ram    schedule 05.03.2016    source источник


Ответы (2)


звучит как проблема с хранилищем ключей. Вы импортировали сертификат в файл .jks?

Хм. Я провел небольшое исследование, и похоже, что это должно сработать. Можете ли вы просмотреть сертификат, добавленный в cacerts?

или возможно, это указывает на jre cacerts, а не на jdk cacerts?

person neal    schedule 05.03.2016
comment
У меня есть 3 файла cacerts на всем моем диске C. Я добавил файл p12 ко всем файлам cacerts, но все равно не повезло. Я вижу приватный ключ в файле cacerts. - person Venki Ram; 05.03.2016
comment
Нил, я добавил файл p12 ко всем cacerts (как jdk, так и jre, а также добавлен к 32 jre). Когда я перечислял хранилище ключей, я вижу закрытые ключи следующим образом: lias name: privatekey Дата создания: 4 марта 2016 г. Тип записи : PrivateKeyEntry Длина цепочки сертификатов: 1 Сертификат [1]: Владелец: CN = 111996787216743957705 Эмитент: CN = 111996787216743957705 Серийный номер: 7b5bc826c2aaa1ff Действителен с: Пт, 04 марта, 19:13:50 PST, 2016 до: Пн, 2 марта, 19:13:50 PST. 2026 Отпечатки сертификата: MD5: E7: BF: .... SHA1: 60: ... SHA256: 1A: 8D: 5D ...: ...... Имя алгоритма подписи: SHA1withRSA Версия: 3 - person Venki Ram; 05.03.2016
comment
Мои единственные другие предложения: 1) создать хранилище ключей (используемое для аутентификации) и посмотреть, работает ли это, и 2) проверить, чтобы убедиться, что вы импортировали сертификат как правильный тип сертификата. Что касается пункта 2, я не могу вспомнить различия между типами сертификатов, потому что я делаю это так редко, но я столкнулся с проблемами на работе, в которых я импортировал сертификат, но я все еще не мог пройти аутентификацию, потому что я добавил сертификат как неправильный тип. - person neal; 05.03.2016

РЕШЕНО !!!!! Я использовал свой рабочий ноутбук и никогда не ожидал, что мой рабочий компьютер находится в области MIM :) Я обнаружил это, когда попытался получить сертификаты для accounts.google.com, щелкнув значок замка в адресной строке браузера. Я переместил код на свое личное устройство, и все заработало, как должно быть. Блин БОЛЬШОЙ корпус !!!!! ...

person Venki Ram    schedule 05.03.2016