Проблемы с использованием Maven и SSL за прокси-сервером



Я только что загрузил Maven и пытался запустить простую команду, найденную на странице "Maven за пять минут" (http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html). это команда:



mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false


когда я запускаю его, я получаю сообщение об ошибке с сертификатом SSL и не могу загрузить из центрального репозитория Maven по адресу https://repo.maven.apache.org/maven2. ошибка " SunCertPathBuilderException: не удается найти допустимый путь сертификации в требуемое целевое".



я сижу за корпоративным брандмауэром и правильно настроены параметры прокси-сервера как http и https открыть с помощью . Я сомневаюсь, что каждый, кто загружает Maven и запускает его в первый раз, должен импортировать SSL-сертификат репозитория Maven, поэтому проблема должна быть с прокси. У кого-нибудь есть опыт с этим?



вот трассировка стека в полном режиме отладки (- X):



 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false



Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4;
2014-08-11T22:58:10+02:00)
Maven home: C:Projectsmavenbin..
Версия Java: 1.7.0_45, поставщик: Oracle Corporation
Java для дома: C:Program файлыпапку Javajdk1.7.0_45JRE и
Локаль по умолчанию: it_IT, кодировка платформы: Cp1252
Название операционной системы: "система Windows 7", версия: "6.1", арки: "для amd64", семейные: "окна"
[DEBUG] использование соединителя WagonRepositoryConnector с приоритетом 0.0 для https://repo.maven.apache.org/maven2 via *****: 8080 с
имя пользователя=*****, пароль=***
Загрузка: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
[Предупреждение] не удалось получить дескриптор плагина для организации.апаш.знаток.Плагины: maven-clean-plugin: 2.5: Plugin
орг.апаш.знаток.Плагины: maven-clean-плагин: 2.5 или один из его
не удалось разрешить зависимости: не удалось прочитать артефакт дескриптор
для организации.апаш.знаток.Плагины: maven-clean-плагин: jar: 2.5
орг.апаш.знаток.плагин.PluginResolutionException: Plugin org.апаш.знаток.Плагины: maven-clean-плагин: 2.5 или один из его
не удалось разрешить зависимости: не удалось прочитать дескриптор артефакта
для организации.апаш.знаток.Плагины: maven-clean-плагин: jar: 2.5
в орг.апаш.знаток.плагин.внутренний.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.Ява:122)
на орг.апаш.знаток.плагин.внутренний.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.Ява:148)
в орг.апаш.знаток.плагин.DefaultBuildPluginManager.loadPlugin (DefaultBuildPluginManager.Ява:81)
в орг.апаш.знаток.плагин.префикс.внутренний.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:138)
на орг.апаш.знаток.плагин.префикс.внутренний.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:121)
в орг.апаш.знаток.плагин.префикс.внутренний.DefaultPluginPrefixResolver.resolve (DefaultPluginPrefixResolver.Ява:85)
в орг.апаш.знаток.жизненный цикл.внутренний.MojoDescriptorCreator.findPluginForPrefix (MojoDescriptorCreator.java:260)
на орг.апаш.знаток.жизненный цикл.внутренний.MojoDescriptorCreator.getMojoDescriptor (MojoDescriptorCreator.java: 220)
в орг.апаш.знаток.жизненный цикл.внутренний.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java: 103)
в орг.апаш.знаток.жизненный цикл.внутренний.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.Ява:83)
на орг.апаш.знаток.жизненный цикл.внутренний.LifecycleStarter.выполнить (LifecycleStarter.Ява:85)
в орг.апаш.знаток.DefaultMaven.doExecute (DefaultMaven.java: 347)
в орг.апаш.знаток.DefaultMaven.выполнить (DefaultMaven.Ява:154)
в орг.апаш.знаток.кли.Мавенкли.execute(MavenCli.java: 582)
в орг.апаш.знаток.кли.Мавенкли.домен (MavenCli.java: 214)
в орг.апаш.знаток.кли.Мавенкли.main (MavenCli.java: 158)
на солнце.отражать.NativeMethodAccessorImpl.invoke0(собственный метод)
в Sun.отражать.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Ява:57)
в Sun.отражать.Делегирование methodaccessorimpl.invoke (DelegatingMethodAccessorImpl.Ява:43)
на Яве.ленг.отражать.Метод.метод Invoke.java: 606)
в орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.launchEnhanced (пусковая установка.java: 289)
на орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.запуска(Launcher.java: 229)
в орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.mainWithExitCode (Launcher.java:415)
в орг.codehaus.сплетение.классовые миры.пусковая установка.Пусковая установка.главная (пусковая установка.java: 356)
Вызванные: org на.затмение.эфир.разрешение.ArtifactDescriptorException: не удалось
прочитать дескриптор артефакта для
орг.апаш.знаток.Плагины: maven-clean-плагин: jar: 2.5
на орг.апаш.знаток.хранилище.внутренний.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java: 349)
в орг.апаш.знаток.хранилище.внутренний.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java: 231)
в орг.затмение.эфир.внутренний.осущ.DefaultRepositorySystem.readArtifactDescriptor (DefaultRepositorySystem.java: 288)
на орг.апаш.знаток.плагин.внутренний.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.java: 108)
... 23 больше
Вызванные: org на.затмение.эфир.разрешение.ArtifactResolutionException: не удалось
передача артефакта орг.апаш.знаток.Плагины: maven-clean-плагин:pom: 2.5
от/до центрального (https://repo.maven.apache.org/maven2):
солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в орг.затмение.эфир.внутренний.осущ.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java: 459)
в орг.затмение.эфир.внутренний.осущ.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java: 262)
в орг.затмение.эфир.внутренний.осущ.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java: 239)
в орг.апаш.знаток.хранилище.внутренний.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:334)
... 26 Подробнее
Вызванные: org на.затмение.эфир.передача.ArtifactTransferException: не удалось передать артефакт
орг.апаш.знаток.Плагины: maven-clean-plugin:pom: 2.5 from / to central
(https://repo.maven.apache.org/maven2):
солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$6.wrap (WagonRepositoryConnector.java: 1016)
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$6.wrap (WagonRepositoryConnector.java: 1004)
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$GetTask.run (WagonRepositoryConnector.java:725)
в орг.затмение.эфир.утиль.совпадение.RunnableErrorForwarder$1.run (RunnableErrorForwarder.Ява:67)
на Яве.утиль.параллельный.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java: 1145)
на Яве.утиль.параллельный.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
на Яве.ленг.Нитка.выполнения(резьба.java:744)
Вызванные: org на.апаш.знаток.вагон.TransferFailedException: солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в орг.апаш.знаток.вагон.услуги поставщиков.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java:935)
в орг.апаш.знаток.вагон.StreamWagon.getInputStream (StreamWagon.Ява:116)
в орг.апаш.знаток.вагон.StreamWagon.getIfNewer (StreamWagon.Ява:88)
на орг.апаш.знаток.вагон.StreamWagon.get (StreamWagon.Ява:61)
в орг.затмение.эфир.соединитель.вагон.WagonRepositoryConnector$GetTask.run (WagonRepositoryConnector.java:660)
... 4 больше
Вызвана: класса javax.чистая.протокол SSL.SSLHandshakeException: солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
на солнце.безопасность.использование SSL.Тревоги.getSSLException (оповещения.java: 192)
в Sun.безопасность.использование SSL.SSLSocketImpl.fatal (SSLSocketImpl.java: 1884)
в Sun.безопасность.использование SSL.Рукопожатие.фатальсе (рукопожатие.java: 276)
в Sun.безопасность.использование SSL.Рукопожатие.фатальсе (рукопожатие.java:270)
в Sun.безопасность.использование SSL.ClientHandshaker.serverCertificate (ClientHandshaker.java:1341)
в Sun.безопасность.использование SSL.ClientHandshaker.processMessage (ClientHandshaker.java:153)
на солнце.безопасность.использование SSL.Рукопожатие.processLoop (Handshaker.java:868)
в Sun.безопасность.использование SSL.Рукопожатие.process_record (Handshaker.java: 804)
в Sun.безопасность.использование SSL.SSLSocketImpl.readRecord (SSLSocketImpl.java: 1016)
в Sun.безопасность.использование SSL.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1312)
в Sun.безопасность.использование SSL.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1339)
на солнце.безопасность.использование SSL.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1323)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.Коннектикут.использование SSL.SSLConnectionSocketFactory.createLayeredSocket (SSLConnectionSocketFactory.java:280)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.Коннектикут.HttpClientConnectionOperator.обновление (HttpClientConnectionOperator.java: 167)
на орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.Коннектикут.PoolingHttpClientConnectionManager.обновление (PoolingHttpClientConnectionManager.java: 329)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.MainClientExec.establishRoute (MainClientExec.java: 392)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.MainClientExec.выполнить (MainClientExec.java: 218)
на орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.Протокол.выполнить (ProtocolExec.java: 194)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.RetryExec.выполнить (RetryExec.Ява:85)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.execchain.RedirectExec.выполнить (RedirectExec.java: 108)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.клиент.InternalHttpClient.doExecute (InternalHttpClient.java: 186)
в орг.апаш.знаток.вагон.услуги поставщиков.http.с помощью HttpClient.осущ.клиент.CloseableHttpClient.выполнить (CloseableHttpClient.Ява:82)
в орг.апаш.знаток.вагон.услуги поставщиков.http.AbstractHttpClientWagon.execute (AbstractHttpClientWagon.java: 756)
в орг.апаш.знаток.вагон.услуги поставщиков.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java: 854)
... 8 более
Вызвано: солнце.безопасность.валидатор.ValidatorException: инфраструктура pkix путь здание не удалось:
солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
в Sun.безопасность.валидатор.PKIXValidator.doBuild(PKIXValidator.java:385)
в Sun.безопасность.валидатор.PKIXValidator.engineValidate (PKIXValidator.java: 292)
в Sun.безопасность.валидатор.Валидатор.проверка(валидатор.java:260)
в Sun.безопасность.использование SSL.X509TrustManagerImpl.проверить (X509TrustManagerImpl.java: 326)
на солнце.безопасность.использование SSL.X509TrustManagerImpl.checkTrusted (X509TrustManagerImpl.java: 231)
в Sun.безопасность.использование SSL.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.Ява:126)
в Sun.безопасность.использование SSL.ClientHandshaker.serverCertificate (ClientHandshaker.java:1323)
... Более 27
Вызвано: солнце.безопасность.поставщик.certpath.SunCertPathBuilderException: не удается
найти действительный путь сертификации в требуемое целевое
на солнце.безопасность.поставщик.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java: 196)
на Яве.безопасность.сертификат.CertPathBuilder.build(CertPathBuilder.java: 268)
в Sun.безопасность.валидатор.PKIXValidator.doBuild(PKIXValidator.java:380)
... 33 более


1012   8  

8 ответов:

дело в том, что ваш плагин maven пытается подключиться к удаленному репозиторию https
(например https://repo.maven.apache.org/maven2/)

это новое подключение SSL для Maven Central было доступно в августе 2014 года !

поэтому, пожалуйста, вы можете проверить, что ваши настройки.XML имеет правильную конфигурацию.

    <settings>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>securecentral</activeProfile>
  </activeProfiles>
  <profiles>
    <profile>
      <id>securecentral</id>
      <!--Override the repository (and pluginRepository) "central" from the
         Maven Super POM -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>

вы можете также использовать простой репозиторий http maven, как это

 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

пожалуйста, дайте мне знаю, если мое решение работает ;)

J.

ответ выше является хорошим рабочим решением, но вот как это сделать, если вы хотите использовать РЕПО SSL:

  • используйте браузер (я использовал IE), чтобы перейти к https://repo.maven.apache.org/
    • нажмите на значок блокировки и выберите "Просмотр сертификата"
    • перейдите на вкладку " Детали "и выберите"Сохранить в файл"
    • выберите тип " Base 64 X. 509 (.CER) " и сохранить его где-нибудь
  • теперь откройте командную подскажите и введите (используйте свои собственные пути):

    keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore

  • теперь вы можете запустить команду снова с параметром

    -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

  • под linux используйте абсолютный путь

    -Djavax.net.ssl.trustStore=/tmp/mavenKeystore

    иначе этой будет

  • такой:

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

дополнительно:

вы можете использовать элемент MAVEN_OPTS переменная окружения, так что вам не придется беспокоиться об этом снова. Смотрите дополнительную информацию о MAVEN_OPTS переменная здесь:

обновление

Я просто наткнулся на этот отчет об ошибке:

https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760

это, кажется, причина наших проблем здесь. Что-то с ca-сертификатами-java сталкивается с ошибкой и не полностью заполняет cacerts. Для меня это началось после того, как я обновился до 15.10, и эта ошибка, вероятно, произошла во время этого процесса.

обходной путь заключается в выполнении следующая команда:

судо /ВАР/Либ/с dpkg/информация/центр сертификации-сертификаты-Ява.послеустановочных настроить

Если вы проверите содержимое хранилища ключей (как в моем исходном ответе), теперь вы увидите еще целую кучу, включая необходимый глобальный корневой ЦС DigiCert.

Если вы прошли через процесс в моем исходном ответе, вы можете очистить ключ, который мы добавили, выполнив эту команду (при условии, что вы не указали другой псевдоним):

судо ключей -удалить -псевдоним систему MyKey -хранилище файл /etc/ssl и сертификаты/Ява/cacerts в

Maven теперь будет работать нормально.


Оригинальный Ответ

Я просто хотел бы расширить ответ Энди о добавлении сертификата и указании хранилища ключей. Это заставило меня начать, и в сочетании с информацией в другом месте я смог понять проблему и найти другую (лучше?) решение.

ответ Энди указывает новое хранилище ключей с Maven в частности, сертификат. Здесь я собираюсь немного шире и добавляю корневой сертификат в хранилище доверия java по умолчанию. Это позволяет мне использовать mvn (и другие java-материалы) без указания хранилища ключей.

для справки моя ОС Ubuntu 15.10 с Maven 3.3.3.

в принципе, хранилище доверия java по умолчанию в этой установке не доверяет корневому сертификату Maven repo (DigiCert Global Root CA), поэтому его необходимо добавить.

Я нашел его здесь и скачано:

https://www.digicert.com/digicert-root-certificates.htm

затем я нашел расположение truststore по умолчанию, которое находится здесь:

/etc / ssl / certs/java / cacerts

вы можете увидеть, какие сертификаты в настоящее время находятся там, выполнив эту команду:

keytool-list-keystore / etc / ssl/certs/java / cacerts

при появлении запроса пароль хранилища ключей по умолчанию "изменяется" (но никто никогда не делает).

в моей настройке отпечаток пальца " DigiCert Global Root CA "не существовал (DigiCert называет его" отпечаток пальца " в ссылке выше). Так вот как его добавить:

sudo keytool-import-file DigiCertGlobalRootCA.ЭЛТ-хранилище ключей /etc / ssl / certs/java / cacerts

Это должно подсказать, если Вы доверяете сертификату, скажите да.

используйте keytool-list еще раз, чтобы убедиться, что ключ существует. Я не стал укажите псевдоним (- alias), чтобы все закончилось так:

mykey, Dec 2, 2015, trustedCertEntry, отпечаток пальца сертификата (SHA1): А8:98:5Д:3А:65:Е5:Е5:С4:В2:Д7:Д6:6Д:40:С6:ДД:2-ой этаж:В1:9С:54:36

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

Это может быть не лучшим решением. Я изменил свой maven с 3.3.x-3.2.х. И эта проблема ушла.

вы можете импортировать сертификат SSL вручную и просто добавить его в хранилище ключей.

для пользователей Linux

синтаксис:

keytool-trustcacerts-keystore /jre / lib / security/cacerts - storepass changeit-importcert-псевдоним nexus-file

пример :

keytool-trustcacerts-keystore / Library / Java/JavaVirtualMachines / jdk1.8.0_144.jdk / Contents / Home/jre / lib / security/cacerts - storepass changeit -importcert -псевдоним Нексус -файл ~/загрузки/Азбука.по COM-протоколу SSL.ЭЛТ

У меня на самом деле была та же проблема.

когда я запускаю

mvn чистый пакет

в моем проекте maven я получаю эту ошибку сертификата с помощью инструмента maven.

Я следил за ответом @Andy до того момента, когда я загрузил .cer file

после этого остальная часть ответа не сработала для меня, но я сделал следующее (Я работаю на машине Linux Debian)

в первую очередь, беги:

keytool-list-keystore "Java path+" /jre / lib / security/cacerts""

например, в моем случае это:

ключей -список -хранилища в /usr/lib в/в JVM/JDK версии-8-оракул-arm32-ВФП-hflt/среда jre/lib/безопасности/cacerts в

если он спрашивает о пароле, просто нажмите enter.

эта команда должна перечислить все сертификаты ssl, принятые java. когда я запустил эту команду, в моем случае я получил 93 сертификаты например.

теперь добавьте загруженный файл .cer до cacerts файл, выполнив следующую команду:

sudo keytool-importcert-file/home/hal/Public / certificate_file_downloaded.ССВ -хранилища в /usr/lib в/в JVM/JDK версии-8-оракул-arm32-ВФП-hflt/JRE и/безопасности/cacerts в

напишите свой пароль sudo, тогда он спросит вас о keystore password

по умолчанию changeit

сказать y что Вы доверяете этому сертификату.

Если вы выполните команду

ключей -список -хранилища в /usr/lib в/в JVM/JDK версии-8-оракул-arm32-ВФП-hflt/среда jre/lib/безопасности/cacerts в

еще раз, в моем случае, я получил 94 содержание cacerts file

Это означает, что он был добавлен успешно.

Если эта проблема происходит для HTTPS репозиторий, f. e.https://repo.spring.io/milestone Вы можете просто попробовать заменить на не обеспеченные: http://repo.spring.io/milestone. И это все

Я получал ту же ошибку о сертификате SSL, когда Maven попытался автоматически загрузить необходимые модули.
В качестве средства защиты я пытался реализовать ответ Люка выше, но обнаружил, что глобальный корневой сертификат CA DigiCert уже находится в доверенном хранилище ключей Java.

Что помогло мне было добавление %JAVA_HOME%\bin к переменной Path (я запускаю Windows). И %JAVA_HOME% это расположение JDK, а не только расположение JRE, так как Maven нуждается в JDK.
Я не конечно, это помогло, но все же помогло. Я абсолютно уверен, что это было единственное, что я изменил.

Comments

    Ничего не найдено.