Проблема с CACERTS IntelliJ + Gradle

В настоящее время я выполняю некоторые вызовы REST через прокси-сервер, поэтому мне нужно выполнить некоторые строгие процессы, чтобы вызовы проходили.

Ранее я строил в Eclipse для POC, но теперь, когда я знаю, что это работает, я пытаюсь перенести его в IntelliJ (личный любимый IDEA) вместе с Gradle для автоматизации сборки.

Я получил проект для компиляции, экспорта всех зависимостей и т. Д., Но когда я запускаю его IN IntelliJ, я получаю сообщение "Cert not found error". Однако отметим, что если я выполню скомпилированный файл Jar (из gradle), используя "java-jar MyJar.jar", он работает отлично и не выдает ошибку сертификата. Ключевым моментом здесь является то, что если я выполняю Jar с помощью JUST задачи gradle за пределами IntelliJ, это работает, но если я пытаюсь выполнить задачу сразу после сборки в IntelliJ, это не удается.

Работает:

  • Выполнение фляги, созданной из задачи сборки Gradle вручную, через VIA CLI
  • Выполнение задачи gradle ниже с помощью VIA CLI "gradle runMain"

Не работает: - Выполнение задачи сборки в IntelliJ и вызов "runMain" в конце задачи сборки

Моя текущая теория заключается в том, что запуск его через java -jar и gradle runMain заставляет JVM использовать стандартные cacerts "/jre_xxx/libs/security/cacerts" (где я уже добавил сертификат), но когда я выполняю Jar в IntelliJ с Gradle он использует другое местоположение. Я также добавил сертификат в "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1.5\jre64\lib\security\cacerts", но все же получил это сообщение об ошибке при запуске его в IntelliJ.

task(runMain, dependsOn: 'classes', type: JavaExec) {
     main = 'com.xxx.xx.x.Utopia'
     classpath = sourceSets.main.runtimeClasspath
     args=[
             "-Djavax.net.ssl.trustStore=C:\\ProgramFiles\\Java\\jre1.8.0_121\\lib\\security\\cacerts"
     ]
 }

Запуск этого VIA CLI, кажется, работает, но никогда с задачей сборки Gradle в IntelliJ.

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ: ошибка, которую я получаю ТОЛЬКО при запуске его в IntelliJ (сбой построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели)

4 ответа

После обращения в службу поддержки JetBrains по моей проблеме, я узнал об этой проблеме. Логически я предполагал, что JRE выполнит JAR-файл, это ТОЛЬКО в случае запуска java -jar my.jar или Gradle из CLI. IntelliJ работает так, что использует исключительно JDK, поэтому мне пришлось модифицировать небольшую JRE, которая была в JDK. Как только я сделал это и добавил его в список CACERTS, найденный в моем jdk.xxx/jre/lib/security/cacerts, я смог решить эту проблему.

https://youtrack.jetbrains.com/issue/IDEA-195428

На случай, если кто-то столкнется с этой проблемой. Я добавил свои сертификаты в хранилище JDK и убедился, что IntelliJ использует JDK, но при попытке загрузить JAR он все равно не сработает. Оказалось, что мне пришлось убить Gradle deamon, работающий в фоновом режиме, поскольку он сохранялся между перезапусками IntelliJ. Я на окнах так ps java | kill работал в Powershell. pkill java будет работать в Linux.

Хорошо... иногда это может быть очень незначительной вещью, которую мы склонны упускать из виду - всегда использовать путь к файлу cacerts из вашей папки безопасности jdk>jre>lib> в настройках Gradle VMOptions.

Используйте встроенный плагин IntelliJ-IDEA, чтобы доверять настраиваемым сертификатам:

https://www.jetbrains.com/help/idea/settings-tools-server-certificates.html

Другие вопросы по тегам