Проблемы с использованием 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 через файл settings.xml . Я сомневаюсь, что каждый, кто загружает Maven и запускает его в первый раз, должен импортировать сертификат SSL в repository 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: \ Projects \ maven \ bin .. Java-версия: 1.7.0_45, поставщик: Oracle Corporation Java home: C : \ Program Files \ Java \ jdk1.7.0_45 \ jre Язык по умолчанию: it_IT, кодировка платформы: Cp1252 Название ОС: “windows 7”, версия: “6.1”, arch: “amd64”, family: “windows” [DEBUG] Использование соединителя WagonRepositoryConnector с приоритетом 0.0 для https://repo.maven.apache.org/maven2 через *****: 8080 с именем пользователя = *****, password = *** Загрузка: https: // repo. maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom [WARNING] Не удалось получить дескриптор плагина для org.apache.maven.plugins: maven-clean-plugin: 2.5: Плагин org.apache.maven.plugins: maven-clean-plugin: 2.5 или одна из его зависимостей не может быть разрешена: Не удалось прочитать дескриптор артефакта для org.apache.maven.plugins: maven- clean-plugin: jar: 2.5 org.apache.maven.plugin.PluginResolutionException: плагин org.apache.maven.pl ugins: maven-clean-plugin: 2.5 или одна из его зависимостей не может быть решена: не удалось прочитать дескриптор артефакта для org.apache.maven.plugins: maven-clean-plugin: jar: 2.5 at org.apache.maven.plugin .internal.DefaultPluginDependenciesResolver.resolve (DefaultPluginDependenciesResolver.java:122) в org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor (DefaultMavenPluginManager.java:148) в org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin (DefaultBuildPluginManager.java : 81) at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:138) в org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject (DefaultPluginPrefixResolver.java:121) в org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve (DefaultPluginPrefixResolver.java:85) в org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix (MojoDescriptorCreator.java:260) в org .apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor (MojoDescriptorCreator.java:220) в org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java:103) в org.apache.maven.lifecycle.internal .DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments (DefaultLifecycleTaskSegmentCalculator.java:83) в org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:85) в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:347) в org.apache.maven.DefaultMaven.execute (DefaultMaven.java:154) на org.apache.maven.cli.MavenCli.execute (MavenCli.java:582) на org.apache.maven.cli.MavenCli.doMain (MavenCli. java: 214) at org.apache.maven.cli.MavenCli.main (MavenCli.java:158) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingM ethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:606) в org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289) на org.codehaus.plexus .classworlds.launcher.Launcher.launch (Launcher.java:229) в org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415) в org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356) Вызвано: org.eclipse.aether.resolution.ArtifactDescriptorException: Не удалось прочитать дескриптор артефакта для org.apache.maven.plugins: maven-clean-plugin: jar: 2.5 at org.apache.maven. repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:349) в org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java:231) в org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor ( DefaultRepositorySystem.java:288) на org.apache.maven.plugin.internal.DefaultPluginDep endenciesResolver.resolve (DefaultPluginDependenciesResolver.java:108) … 23 more Причинено: org.eclipse.aether.resolution.ArtifactResolutionException: Не удалось передать артефакт org.apache.maven.plugins: maven-clean-plugin: pom: 2.5 из / to central ( https://repo.maven.apache.org/maven2 ): sun.security.validator.ValidatorException: не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запроса target at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:459) в org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:262) в org.eclipse.aether. internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:239) в org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:334) … 26 more Причиняется: org.eclipse.aether.transfer .ArtifactTransferExceptio n: Не удалось передать артефакт org.apache.maven.plugins: maven-clean-plugin: pom: 2.5 от / до центра ( https://repo.maven.apache.org/maven2 ): sun.security.validator.ValidatorException : Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели на org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap (WagonRepositoryConnector.java:1016) в org. eclipse.aether.connector.wagon.WagonRepositoryConnector $ 6.wrap (WagonRepositoryConnector.java:1004) на org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run (WagonRepositoryConnector.java:725) на org.eclipse.aether.util .concurrency.RunnableErrorForwarder $ 1.run (RunnableErrorForwarder.java:67) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) на java.lang.Thread.run (Thread.java:744) Вызвано: org.apache.maven.wagon.Transf erFailedException: sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели на org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java:935) в org.apache.maven.wagon.StreamWagon.getInputStream (StreamWagon.java:116) в org.apache.maven.wagon.StreamWagon.getIfNewer (StreamWagon.java:88) в org.apache. maven.wagon.StreamWagon.get (StreamWagon.java:61) на org.eclipse.aether.connector.wagon.WagonRepositoryConnector $ GetTask.run (WagonRepositoryConnector.java:660) … еще 4 вызвано: javax.net.ssl .SSLHandshakeException: sun.security.validator.ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели на sun.security.ssl.Alerts.getSSLException (Alerts.java: 192) на sun.security.ssl.SSLSocketImpl.fatal (SSLSocketIm pl.java:1884) at sun.security.ssl.Handshaker.fatalSE (Handshaker.java:276) at sun.security.ssl.Handshaker.fatalSE (Handshaker.java:270) at sun.security.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:1341) на sun.security.ssl.ClientHandshaker.processMessage (ClientHandshaker.java:153) на sun.security.ssl.Handshaker.processLoop (Handshaker.java:868) на sun.security.ssl.Handshaker. process_record (Handshaker.java:804) на sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:1016) на sun.security.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1312) на sun.security.ssl.SSLSocketImpl .startHandshake (SSLSocketImpl.java:1339) на sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1323) в org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket (SSLConnectionSocketFactory .java: 280) at org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade (HttpClientConnectionOperator .java: 167). .execchain.MainClientExec.establishRoute (MainClientExec.java:392) в org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute (MainClientExec.java:218) на org.apache.maven.wagon .providers.http.httpclient.impl.execchain.ProtocolExec.execute (ProtocolExec.java:194) в org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute (RetryExec.java:85) на org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute (RedirectExec.java:108) на org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient. doExecute (InternalHttpClient.java:186) в org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute (CloseableHttpClient.java:82) на org.apache.maven.wagon.provide rs.http.AbstractHttpClientWagon.execute (AbstractHttpClientWagon.java:756) на org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData (AbstractHttpClientWagon.java:854) … еще 8 Причина: sun.security.validator .ValidatorException: Не удалось создать путь PKIX: sun.security.provider.certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели на sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:385) at sun.security.validator .PKIXValidator.engineValidate (PKIXValidator.java:292) на sun.security.validator.Validator.validate (Validator.java:260) на sun.security.ssl.X509TrustManagerImpl.validate (X509TrustManagerImpl.java:326) на sun.security. ssl.X509TrustManagerImpl.checkTrusted (X509TrustManagerImpl.java:231) на sun.security.ssl.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.java:126) на sun.security.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:1323) … 27 more Причинение: sun.security.provider. certpath.SunCertPathBuilderException: не удалось найти допустимый путь сертификации для запрошенной цели на sun.security.provider.certpath.SunCertPathBuilder.engineBuild (SunCertPathBuilder.java:196) в java.security.cert.CertPathBuilder.build (CertPathBuilder.java:268) в sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:380) … еще 33

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

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

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

     securecentral    securecentral    central http://repo1.maven.org/maven2  true      central http://repo1.maven.org/maven2  true       

Вы также можете использовать простой почтовый хранилище http maven

    central Maven Plugin Repository http://repo1.maven.org/maven2 default  false   never    по    central Maven Plugin Repository http://repo1.maven.org/maven2 default  false   never    

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

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 чтобы вам не пришлось беспокоиться об этом снова. Подробнее о переменной MAVEN_OPTS здесь :

Обновить

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

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

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

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

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

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

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

sudo keytool -delete -alias mykey -keystore / etc / ssl / certs / java / 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

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

/ и т.д. / SSL / Certs / Java / cacerts

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

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

Когда будет предложено, пароль хранилища ключей по умолчанию «changeit» (но никто никогда не делает).

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

sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore / etc / ssl / certs / java / cacerts

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

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

mykey, 2 декабря 2015 г., trustedCertEntry, отпечаток сертификата (SHA1): A8: 98: 5D: 3A: 65: E5: E5: C4: B2: D7: D6: 6D: 40: C6: DD: 2F: B1: 9C : 54: 36

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

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

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

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

Синтаксис:

keytool -trustcacerts -keystore / jre / lib / security / cacerts -storepass changeit -importcert -alias nexus -file

Пример :

keytool -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -importcert -alias nexus -file ~ / Downloads / abc.com-ssl. катодно-лучевая трубка

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

когда я бегу

mvn clean package

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

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

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

в первую очередь, запустить:

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

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

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

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

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

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

sudo keytool -importcert -file /home/hal/Public/certificate_file_downloaded.cer -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / security / cacerts

напишите свой пароль sudo, тогда он спросит вас о пароле хранилища ключей

по умолчанию используется changeit

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

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

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

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

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

Если эта проблема возникает для репозитория HTTPS , fe https://repo.spring.io/milestone вы можете просто попытаться заменить не защищенным: http://repo.spring.io/milestone . Вот и все

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

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

  • Как решить проблему с подтверждением сертификата в Windows?
  • ssl.SSLError: версия протокола предупреждения tlsv1
  • «Java недоступен» в Firefox 32 бита
  • Запрос Python, бросающий SSLError
  • Настройка Apache для обслуживания нескольких поддоменов через HTTP + HTTPS
  • SSL и непонимание вручную
  • Heroku SSL в корневом домене
  • Apache HttpClient на Android, производящем CertPathValidatorException (имя_отчета! = Имя_почты)
  • Как заставить прокси-сервер charles работать с nougat 7 Android?
  • ошибка установки пакета с ошибкой проверки сертификата SSL
  • Установите сертификат SSL с ненадежного веб-сайта в оснастку «Сертификаты», используя IE
  • Давайте будем гением компьютера.